1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[実験]DockerコンテナでSAStrutsのチュートリアルをリモートデバッグしてみる

Last updated at Posted at 2016-11-25

久しぶりにStrutsの事聞かれたので、Dockerでtomcatを動かして、SAStrutsのチュートリアルをデプロイして
デバッガが動くところまで、試してみた。(聞かれた事とは全く関係なかったりする)
ちなみに、もう10年くらいJavaでStrutsで的な事してない。。。

なので、設定とかは色々適当。最新のJ2EEがどんな感じなのかは全く知らない。

・準備
もろもろインストールする。

[1]eclipseをインストール(マシン変えてから入れてさえいなかった)
  ->書いている時点で最新?のNeon(4.6.1)をインストール
  (EEではなく、普通のJava環境の奴を選択。
   後から結局、WTP?を入れたorz)
  
[2]eclipseのプラグイン導入
SAStrutsの公式ページ見ながら適当に導入。
・Doltenプラグイン(S2用)
・プロパティエディタ(S2用)
・SAStrutsプラグイン(S2用)
・TomcatManager(不要だった。リモートデバッグには使わない。。。)
・JavaWebDeveloperTools(多分、WTP?の事?)
・JavaEEDeveloperTools(多分、WTP?の事?)

[3]DockerのTomcatイメージを導入
Macのjreが1.8だったのと(JDKを入れたか覚えてない)、
どのバージョンまでSAStrutsをtomcatで動かした記事があるか
ネットで調べ(よくは見ていない。一番上のリンクがtomcat8、jdk8だった。。。)、
dockerhubから公式をダウンロード。

docker run -p 8080:8080 --name tomcat8 -d tomcat:8-jre8

起動後、
とりあえず、localhost:8080で昔よく見た汚い猫画像を確認。。。

dartycat.png

多分、コンテナの設定ファイルを触るのでemacsを導入する。
(viは苦手。)

docker exec tomcat8 /bin/bash

ログインして、

apt-get install emacs

※mobyはdebian系なのか?

インストールされたら、emacsを起動させるため、
とりあえず、環境変数設定

export TERM=xterm

設定後、emacsを起動し、「/root/.bashrc」に上記変数設定し保存。

# ~/.bashrc: executed by bash(1) for non-login shells.                                                                                                                             

# Note: PS1 and umask are already set in /etc/profile. You should not                                                                                                              
# need this unless you want different defaults for root.                                                                                                                           
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '                                                                                                                                 
# umask 022                                                                                                                                                                        

# You may uncomment the following lines if you want `ls' to be colorized:                                                                                                          
# export LS_OPTIONS='--color=auto'                                                                                                                                                 
# eval "`dircolors`"                                                                                                                                                               
# alias ls='ls $LS_OPTIONS'                                                                                                                                                        
# alias ll='ls $LS_OPTIONS -l'                                                                                                                                                     
# alias l='ls $LS_OPTIONS -lA'                                                                                                                                                     
#                                                                                                                                                                                  
# Some more alias to avoid making mistakes:                                                                                                                                        
# alias rm='rm -i'                                                                                                                                                                 
# alias cp='cp -i'                                                                                                                                                                 
# alias mv='mv -i'                                                                                                                                                                 

export TERM=xterm


保存して、ログアウトし、docker commit

docker commit tomcat8 tomcat8withemacs

センスのない名前をつけてコミット後、速攻コンテナを消す

docker rm -f tomcat8

[4]ApacheTomcatの公式から、tomcat8をダウンロードし、解凍。
(eclipseのプロジェクトビルド用)
※適当なローカルフォルダに解凍した。

[5]SAStrutsの公式からチュートリアルの最新zipをダウンロード。
(11年までが最終っぽい。でも、今でもバリバリ現役だからすごい。)

[6]とりあえず、チュートリアルをeclipseにプロジェクトとしてimport
※import直後はライブラリの設定が通ってないのでエラーになっているハズ。

・eclipseでチュートリアルのビルド、WAR作成

[1]ビルドを通すため、eclipseの環境設定のTomcatを設定。
Tomcatのパスは、準備で解凍したTomcatのフォルダを指すようにした。
また、バージョンも8に設定。

eclipse_setting_1.png

設定すると、エラーは出なくなるハズ。

[2]インポートしたチュートリアルのプロジェクトを右クリックし、
「properties」でダイアログ起動し、「Tomcat」選択

eclipse_setting_2.png

WARエクスポート設定を選んで、

eclipse_setting_2.png

WARのパスを設定、「Apply」ボタン -> 「OK」ボタンを押す

[3]再び、プロジェクトを右クリックし、
「Tomcatプロジェクト」->「プロジェクトの設定に従いWARファイルを作成」を選択。
WARが作成され、成功した通知のダイアログが立ち上がる。

pies-no-MacBook-Pro:work pies$ ls -la ~/work/tktk.war 
-rw-r--r--  1 pies  staff  12317670 11 26 12:55 /Users/pies/work/tktk.war
pies-no-MacBook-Pro:work pies$ 

出来てる感じ。

・リモートデバッグするコンテナの準備

[1]準備で作成したイメージを使って、コンテナ起動。

docker run -p 8080:8080 -p 8000:8000 -e JPDA_ADDRESS=8000 -e JPDA_TRANSPORT=dt_socket --name tomcat8tktk -d tomcat8withemacs

※リモートデバッグの為に、ポート8000を追加した
※後述、catalina.shも書き換えるが、環境変数を設定しないと、リモートデバッグが起動しなかったので、環境変数を追加した。

[2]コンテナのシェル起動

docker exec -it tomcat8tktk /bin/bash

※Tomcatの設定を触る為、起動
※以下、ファイルを編集する作業はemacsで行った。

[3]「/usr/local/tomcat/conf/tomcat-users.xml」に設定追加。

  <role rolename="manager-gui"/>
  <user username="admin" password="admin" roles="manager-gui"/>

※WARをTomcatマネージャーで手動デプロイする為。面倒くさい事はしない。。。

[4]「/usr/local/tomcat/bin/catalina.sh」の「CATALINA_OPTS」の設定部分を変更

以下のブロックで、CATALINA_OPTSを設定しているが、

if [ "$1" = "jpda" ] ; then
・・・
fi

上記、ブロックの直下に、以下を追記して、保存。

# FOR TKTK REMOTE DEBUG 
JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"

強制的にリモートデバッグを有効にする。

[5]シェルを抜け、コンテナを再起動する。

docker restart tomcat8tktk

・チュートリアルのデプロイと確認

[1]再び、猫画面(http://localhost:8080)を呼び出し、
画面の「Manager App」ボタンをクリック

tomcat_deploy_1.png

[2]マネージャ画面へのアクセスなので認証が出る。

tomcat_deploy_2.png

「tomcat-users.xml」で追記した、ユーザー・パスを入力してログイン

tomcat_deploy_3.png

マネージャー画面が起動。

[3]マネージャー画面の「WAR file to deploy」項で、
「Select WAR file to upload」で作成したWARを設定し、

tomcat_deploy_4.png

「Deploy」ボタンを押す。

tomcat_deploy_5.png

デプロイ成功。

[4]デプロイしたチュートリアルが起動するか、確認する。
http://localhost:8080/tktk/
にアクセス。

スクリーンショット 2016-11-26 14.07.56.png

indexは起動。リンク「足し算」を押してみる。

tomcat_deploy_7.png

無事、チュートリアルのデプロイは完了。

・チュートリアルのリモートデバッグ

[1]eclipseで、「Debug Configurations」を開き、「Remote Java Application」を選択し、右クリックで「New」を選択。

tomcat_remote_debug_1.png

プロジェクトに、チュートリアルのプロジェクト、
Hostにlocalhost
Portに8000
を指定、「apply」ボタンをクリック後、「Debug」ボタンをクリック。

起動したっぽいけど、よくわからないので、eclipseのビューをDebugに変えてみる。

tomcat_remote_debug_2.png

多分(。。。)、起動している。

[2]足し算をデバッグしてみる。
ビューをJavaに切り替え、「AddAction.java」にブレークポイントを設定。

tomcat_remote_debug_3.png

[3]足し算画面で、入力し、サブミット。

tomcat_remote_debug_4.png

eclipseがブレークポイントに反応するが、

tomcat_remote_debug_5.png

こんなダイアログが、表示される。
(OKを押すと、も1度、出る。。。。orz)

DIのせーかな。。。。

でも、ブレーク自体は失敗せず、
デバッグビューに切り替わり、ブレークポイントの位置で
実行が止まる。

tomcat_remote_debug_6.png

AddActionのインスタンスの中身も見れている。

tomcat_remote_debug_7.png

書き換えてみる。。。

tomcat_deploy_8.png

ステップ実行し、計算。
tomcat_deploy_9.png

何事もなく、書きかわるw
で、そのまま、ステップオーバーし、ブラウザにレスポンスを返させる。

tomcat_remote_debug_10.png

何事もなく、書き換わったwwww

というわけで、実験終わり。

すんなり、DcokerコンテナのTomcat上のSAStrutsが
リモートデバッグ出来た感じ。。。

JDKやJ2EEのバージョンが、だいーーーぶ先に行っても、
普通に動いてしまうS2やSAStrutsが凄いのかな。。。
Dockerも凄いけど。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?