第11章 アプリケーションのデバッグ
本セクションでは、ローカルデプロイメントとリモートデプロイメントの両方で、Thorntail ベースのアプリケーションをデバッグする方法を説明します。
11.1. リモートのデバッグ
アプリケーションをリモートでデバッグするには、まずデバッグモードで開始するように設定してから、デバッガーを割り当てる必要があります。
11.1.1. デバッグモードでのアプリケーションをローカルで起動
Maven ベースのプロジェクトのデバッグ方法の 1 つが、デバッグポートを指定している間にアプリケーションを手動で起動し、その後にリモートデバッガーをそのポートに接続することです。この方法は、少なくとも以下のアプリケーションのデプロイメントに適用できます。
-
mvn thorntail:run
ゴールを使用してアプリケーションを手動で起動する場合。 -
mvn thorntail:start ゴールを使用して終了を待たずにアプリケーションを起動
するとします。これは、統合テストを実行する場合に特に便利です。 - Thorntail に Arquillian アダプターを使用する場合。
前提条件
- Maven ベースのアプリケーション
手順
- コンソールで、アプリケーションでディレクトリーに移動します。
アプリケーションを起動し、
-Dthorntail.debug.port
引数を使用してデバッグポートを指定します。$ mvn thorntail:run -Dthorntail.debug.port=$PORT_NUMBER
ここで、
$PORT_NUMBER
は未使用のポート番号です。リモートデバッガー設定のこの番号を覚えておいてください。
11.1.2. デバッグモードでの uberjar の起動
アプリケーションを Thorntail uberjar としてパッケージ化することを選択した場合は、以下のパラメーターを使用してアプリケーションを実行してデバッグします。
前提条件
- アプリケーションによる uberjar
手順
- コンソールで、uberjar のディレクトリーに移動します。
以下のパラメーターで uberjar を実行します。行上の uberjar の名前の前に、すべてのパラメーターが指定されていることを確認してください。
$ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$PORT_NUMBER -jar $UBERJAR_FILENAME
$PORT_NUMBER
は未使用のポート番号です。リモートデバッガー設定のこの番号を覚えておいてください。JVM を一時停止してリモートデバッガー接続を待つ場合は、アプリケーションを起動する前に
suspend
をy
に変更します。
関連情報
11.1.3. デバッグモードでの OpenShift でのアプリケーションの起動
OpenShift で Thorntail ベースのアプリケーションをリモートでデバッグするには、コンテナー内で JAVA_DEBUG
環境変数を true
に設定し、リモートデバッガーからアプリケーションに接続できるようにポート転送を設定する必要があります。
前提条件
- アプリケーションが OpenShift で実行している。
-
oc
バイナリーがインストールされている。 -
ターゲット OpenShift 環境で
oc port-forward
コマンドを実行する機能。
手順
oc
コマンドを使用して、利用可能なデプロイメント設定を一覧表示します。$ oc get dc
アプリケーションのデプロイメント設定の
JAVA_DEBUG
環境変数をtrue
に設定します。これにより、JVM がデバッグ用にポート番号5005
を開くように設定されます。以下は例になります。$ oc set env dc/MY_APP_NAME JAVA_DEBUG=true
設定変更時に自動的に再デプロイするように設定されていない場合は、アプリケーションを再デプロイします。以下は例になります。
$ oc rollout latest dc/MY_APP_NAME
ローカルマシンからアプリケーション Pod へのポート転送を設定します。
現在実行中の Pod を一覧表示し、アプリケーションが含まれる Pod を検索します。
$ oc get pod NAME READY STATUS RESTARTS AGE MY_APP_NAME-3-1xrsp 0/1 Running 0 6s ...
ポート転送を設定します。
$ oc port-forward MY_APP_NAME-3-1xrsp $LOCAL_PORT_NUMBER:5005
ここで、
$LOCAL_PORT_NUMBER
はローカルマシンで選択した未使用のポート番号になります。リモートデバッガー設定のこの番号を覚えておいてください。
デバッグが完了したら、アプリケーション 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 ダウンロードページ からダウンロードできます。
手順
- Red Hat CodeReady Studio を起動します。
アプリケーションの新規デバッグ設定を作成します。
- Run→Debug Configurations をクリックします。
- 設定のリストで、Remote Java アプリケーション をダブルクリックします。これにより、新しいリモートデバッグ設定が作成されます。
- Name フィールドに、設定に適した名前を入力します。
- アプリケーションが含まれるディレクトリーへのパスを Project フィールドに入力します。便宜上、Browse… ボタンを使用できます。
- Connection Type フィールドを Standard (Socket Attach) に設定していない場合は、これを設定します。
- Port フィールドを、アプリケーションがデバッグをリッスンしているポート番号に設定します。
- Apply をクリックします。
Debug Configurations ウィンドウの Debug ボタンをクリックしてデバッグを開始します。
初めてデバッグ設定を迅速に起動するには、Run→Debug History をクリックし、一覧から設定を選択します。
関連情報
Red Hat ナレッジベースの「Debug an OpenShift Java Application with JBoss Developer Studio」
Red Hat CodeReady Studio はこれまで JBoss Developer Studio と呼ばれていました。
- OpenShift ブログの記事 「Debugging Java Applications On OpenShift and Kubernetes」