トップ » 技術記事 » OpenSocialを始めよう(11) - ShindigをEclipse上でデバッグ(後編)

OpenSocialを始めよう(11) - ShindigをEclipse上でデバッグ(後編) はてなブックマーク数 このエントリーをブックマークに追加

前回は、Apache ShindigをEclipseに取り込み、ビルドを成功させるところまで解説しました。
今回はいよいよ、ShindigをEclipseからデバッグ実行し、ソースコードレベルでステップ実行するための手順をお話しします。

デバッグ実行を行う

今回はいよいよ、ShindigをEclipseからデバッグ実行し、ソースコードレベルでステップ実行するための手順をお話しします。今回の記事は、前回の手順を全て終えている事が前提ですので、ShindigのビルドがEclipse上で出来ていない方は、前回の記事を参照してください。

では、いよいよデバッグ実行を行えるよう設定していきましょう。
手順は大きく分けて二つです。

  1. JettyをEclipseからMaven経由で動かす
  2. 動作中のShindigにアタッチしてリモートデバッグする

以下に、これらの手順を詳細に解説していきます。

JettyをEclipseからMaven経由で動かす

Shindigを実行するには、Maven2経由でJetty(軽量・高速なサーブレットコンテナ)を起動するのが簡単です。
ここでは、EclipseからMaven2のコマンドを実行して、Jettyをデバッグ実行する方法を見ていきます。以下の手順に従ってください。

  1. 「EclipseのRunメニュー→External Tools」をクリックする。
  2. 表示されたダイアログの「Main」タブで、以下のような情報を入力する
    • Name: 任意(maven_jettyとでもしておくと良いでしょう)
    • Location: mvnコマンドのフルパス(「/usr/bin/mvn」など)
    • Working Directory: 「Browse Workspace」ボタンを押して、「プロジェクトルート/server」を選択する。
    • Arguments: 「jetty:run」と入力する
  3. external-tools.png

  4. 同じダイアログの「Environment(環境)」タブで、MAVEN_OPTSと言う環境変数を作成し、以下の値を入力する。
    -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y
    

    jetty-debug-env.png

  5. 同じダイアログの「Run(実行)」ボタンを押し、実行する。

以上の作業を行うと、Maven経由でJettyが起動し、以下のメッセージを表示して停止します。

jetty-started.png

これは、Jettyがデバッガからの接続を待って停止している状態です。後はEclipseからJettyに対してリモートデバッグ接続すれば、Jettyがデバッグ起動します。

上の手順で、意味がわかりにくい部分を以下に補足説明します。さっさとデバッグを試したい方は、次の手順「Shindigをデバッグする」に進んでください。
2の手順は、Maven2でJettyを起動するためのコマンド「mvn jetty:run」をEclipseから実行するための設定です。作業ディレクトリに指定した「プロジェクトルート/server」が、JavaEE WebアプリとしてJettyにデプロイされます。
3の手順では、Jettyをデバッグ実行し、かつデバッガアプリからの接続があるまで実行を一時停止するよう設定しています。
最も重要なのは「-Xrunjdwp」オプションです。サブオプションの「address=4000」により、TCPソケット4000番を用いてデバッガと通信するよう設定されます。オプションについての詳しい説明は、こちらのページを参照すると良いでしょう。
Shindigをデバッグする

前回の記事から随分長い道のりでしたが、やっとここまでたどり着きました。Shindigのデバッグです!

  1. 「Run→Debug→Open Debug Dialog」を選択し、デバッグ設定ダイアログを表示します。
  2. 左メニューから「Remote Java Application」を選択し、新規設定を追加します。
  3. 「Connect」タブに、以下の情報を入力する。
    • Project: Shindigのプロジェクト名
    • Host: localhost
    • Port: 4000(上で設定した、Jettyのデバッグ用ポート)

    debug_config.png

以上の情報を入力してデバッグ実行を開始する(Debugボタンを押す)と、停止していたコンソール出力が再開され、Jettyの起動が見て取れます。

...
[INFO] Web overrides =  none
[INFO] Webapp directory = /Users/shumpei/tool/dev/google/opensocial/shindig/src2/java/server/target/shindig-server-1-SNAPSHOT
[INFO] Starting jetty 6.1.9 ...
2008-06-27 16:11:02.013::INFO:  jetty-6.1.9
2008-06-27 16:11:02.247::INFO:  No Transaction manager found - if your webapp requires one, please configure one.
2008-06-27 16:11:03.393::INFO:  Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server

では、記念すべき初めてのデバッグが成功している事を確認するため、ブレークポイントを設定してステップ実行してみましょう。「org.apache.shindig.gadgets.servlet.GadgetRenderingServlet」(Googleガジェットの表示に用いられるサーブレット)のdoGet()メソッドなんかは、ガジェットを表示する際に必ず実行されるので、お薦めです。同メソッド内の最初の行にブレークポイントを仕掛けたら、「http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html」にアクセスしてみましょう。

shindig_step_exec.png

Apache Shindigのデバッグはこれで完璧です!

Shindigソース・リーディング・ガイド

Shindigをステップ実行できるようになった事で、ソースコードの読解等も非常にやり易くなった事でしょう。筆者もShindigのソースを読み始めたばかりですが、同じくShindigのソースを読もうとなさっている方のために、ポイントを簡単に書き留めておきたいと思います。

前提として、ShindigはGuiceと言うDIコンテナに依存しています。GuiceはJavaソースコードとアノテーションを使用して設定を行うDIコンテナ(著名なSpring FrameworkはXMLを使用します)で、設定のし易さと高速な実行性能がウリです。

java/commonディレクトリ以下には、Google GadgetsやOpenSocialに依存しない、ユーティリティコードが含まれます。セキュリティやキャッシュ、Guice関連のユーティリティ等があります。

java/gadgetsディレクトリは、Googleガジェットのコンテナを形成するコードが含まれており、Shindigの中心部分と言っても良いでしょう。特に「org.apache.shindig.gadgets.servlet」以下には、ガジェットのXML仕様やAPIを満たすためのサーブレットが格納されています。Shindigのソースは、このパッケージから読み始めるとわかり易いと思います。

java/social-apiディレクトリには、OpenSocial APIの実装コードが中心となります。「org.apache.shindig.social.GadgetDataServlet」「org.apache.shindig.social.opensocial.OpenSocialDataHandler」を中心に読み進めれば良いでしょう。また、第9回で紹介したサンプルコンテナも、org.apache.shindig.social.samplecontainerパッケージ以下に格納されています。

java/serverディレクトリには、Webアプリの設定ファイルであるweb.xmlが含まれます。Jettyによって実行するMavenモジュールはこのディレクトリになります。

最後に、javascriptディレクトリには、ガジェットAPIやOpenSocial APIの実装となるJavaScriptコードが格納されています。

まとめ

これでApache Shindigのデバッグ環境も整い、ソーシャルアプリをローカルで実行/デバッグする事が可能になりました。ソーシャルアプリの開発、もしくは独自のOpenSocialコンテナ開発に役立ててください。
次回はまたOpenSocial APIの解説に戻り、「データの永続化」についてお話ししたいと思います。乞うご期待!

Series Navigation«ShindigをEclipse上でデバッグ(前編)

このサイトについて

八角研究所
株式会社八角研究所のWEBサイトですよー。 いろんなものを創り出すことのできる環境をコツコツ構築中。 いったい、いつになったらできるのか。 この技術情報サイトもそのための活動の一環のつもり。

執筆者紹介

shiraishi

shiraishi

最近書いてばっかりいます。 眠いとおんなじことばかり書きます。 そして、大概眠いです。

TrackBack URL :