読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

NetBeansでGlassFishのリモートデバッグ

AdventCalendar NetBeans GlassFish

この記事は「GlassFish Advent Calendar 2013」の2日目の記事となります。

昨日はGlassFish Users Group Japanの運営をされていますHASUNUMA Kenjiさん(@btnrouge)による「GlassFish Community便り」でした。

明日は再度HASUNUMA Kenjiさん(@btnrouge)です!

デプロイした環境で動かない…だと

先日、手元の開発環境(NetBeans+GlassFish)で上手く動くのに、デプロイしたサーバ環境(GlassFish)で上手く動かない、という事象がお隣のチームであったようです。

ログを解析すれば何らか情報が得られるでしょうが、なんと信じがたいことにアプリケーションによるログ埋め込みしてないとか何とか聞こえ………いや、聞こえないっ、僕には何も聞こえないっ(((゚Д゚)))ガタガタ

f:id:kikutaro777:20131202182457j:plain

横で聞いてるだけでショボ-ン(´・ω・`)

それはさておき、そういう状況下でも、VisualStudioって確かリモートデバッグして原因究明できたよなぁ…とふと思ってNetBeans+GlassFishってどうなんだろと調べてみたら…

普通にできるらしい(^^;

知らなかった…ってか、これ知ってたら何かと便利なのに気づいてなかった……

うわぁぁ(ノД`)

ということで、2010年に@backpaper0さんがEclipseベースに既に書かれて(さらにそこに@shinsan68kさんがNetBeansなら超簡単にできるよと突っ込みあり)いますが、NetBeansでの具体的な手順を書いてみようと思います!

確認環境

自分が試したのは以下環境でした。

■サーバ(リモートデバッグ対象)環境
OS :Windows Server 2008 R2 64bit
AP :GlassFish 3.1.2.2
Java :JDK7

■クライアント(開発)環境
OS :Windows 7 Professional 64bit
IDE :NetBeans 7.3
Java :JDK7

手順

まずはデバッグしたいサーバ環境のGlassFishを一旦止めて、以下のdebugオプション付きで起動します。

asadmin start-domain --debug

今回の環境ではdomainは1つだったのでドメイン名は省いてます。

でこんな感じのメッセージが表示されました。
f:id:kikutaro777:20131129191911j:plain

続いてサーバマシンのデバッグポート(上記メッセージに合ったので9009)をあけました。

サーバ側の設定はこれで完了。

で、手元の開発マシンのNetBeansを起動してデバッグメニューから「デバッガのアタッチ」を選びます。

f:id:kikutaro777:20131129192552j:plain

すると以下のウィンドウが表示されます。今回はそのままJPDAにして、サーバのIPと先ほどあけたポートを入れました。

f:id:kikutaro777:20131129192556j:plain

ちなみにJPDAって何…(^^;と調べたらJava Platform Debugger Architectureの略称とのこと。知らなかった(>_<)

Java SE7のドキュメントは英語ですが、SE6では日本語のドキュメントがありました。
http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/
http://docs.oracle.com/javase/jp/6/technotes/guides/jpda/

で、OKボタンを押すと、しばらくして以下の状態がNetBeans画面下の出力に表示されて

f:id:kikutaro777:20131129192604j:plain

その後、ユーザー・プログラム実行中が出てデバッグ実行しているような状態となります(下図のようにデバッグ終了ボタンが出たり)。

f:id:kikutaro777:20131202183622j:plain

次にデプロイしたWebのプロジェクトを開いて、止めたい部分のソースにブレイクポイントを置きます。

f:id:kikutaro777:20131129192608j:plain

で、ブラウザを起動して、デプロイされてるWebアプリケーションに普通にアクセスして、ブレイクの部分に該当するような操作をすると…

f:id:kikutaro777:20131129192612j:plain

おお!ブレイクに止まった!!!

もちろん普通にウォッチもできるし、ローカルでデバッグしてるのと同じ感じです。

結局最初の問題がなんだったか…私はわからないのですが、リモートデバッグ機能を確認できて個人的にはめでたしめでたしでした。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村