S2JavelinとArrowViewでログをシーケンス図化する

私はSeasar2に非常にお世話になっています。ふりかえればもう5つの実プロジェクトに採用しており、私のチームでJava+WebといえばデフォでSeasar2なのです。
そして実はS2にはもう一つの縁があります。最近はUrumaに携わるSMGの小森さん(id:y-komoriさん)は、Object-Oneディベートでのライバルでもあります。
そんな小森さんから、ログ出力ツールのS2JavelinとログビューアのArrowVision(正確にはSMGのそのスーパーセットにあたるENdoSnipeという製品)を教えていただきましたので、早速使ってみました。

私の評価ポイントは二つあります。

性能測定・障害解析の手段として

まず、売りである性能測定・障害解析ツールとして使えるかどうか。S2JavelinはS2のコンポーネントなので、diconファイルに手を加えるだけで大丈夫です。(ソースコードに手を入れる必要がない)
ただしセットアップにはS2の知識が必要です。私は以下のページを参考にしたのですが、最新バージョン(1.0)のセットアップを行うには、「更新履歴」にある、「Seasar Conference 2007 Autumnのセッション資料PDF」を読まなくてはいけません。また、なぜかデフォルトではログ出力は「オフ」になっているので、javelin.propertiesファイルを修正しなくてはいけません。

http://s2javelin.sandbox.seasar.org/s2javelin.html

Ver1.0.0を公開しました。

S2JmxJavelinとS2Javelinを統合し、S2Javelinとしました。

S2JmxJavelinViewerは、StatsVisionに改名しました。

利用方法の詳細は、近日中にこのページを更新します。

11/11のSeasar Conference 2007 Autumnのセッション資料にて、 Ver1.0.0の特徴、および利用方法が記述されています。

S2Javelinより引用】

出力されたログファイル(標準ではjavelin.jvn)をArrowVisionにドラッグ&ドロップすると↓な感じで表示されます。いい感じです。

シーケンス図の矢印をクリックすると、そのメソッドの処理時間がツールチップ表示されるのがうれしいですね。また、詳細ビューにはログの内容(SQLログの場合はSQL)が表示されるのも直感的で良いです。
ただ、このように見栄えを整形するにはちょっとしたコツが必要です。画面右下の「ノード・スレッド・フィルタ」を使って、自分の関心のあるスレッドとクラスに対象を絞り、拡大スライドバーで倍率をいい感じに調整する必要があります。

納品ドキュメントの作成手段として

もうひとつ私が確かめたかったのは、シーケンス図を納品用に流用できないか、ということです。詳細設計書の一部として、リクエスト単位のシーケンスが必要な場合もあります。
結論からいうと、こちらはちょっと厳しい感じです。シーケンス図をBMP画像として出力する機能はありますが、うっかりログを取りすぎると「サイズが大きすぎて出力できませんエラー」となります。これを防ぐには上述したフィルタを使って絞り込む必要がありますが、それなりに手間がかかります。また、左から順に綺麗なシーケンスを描こうとすると、クラスをドラッグして場所を移動してあげる必要もあります。
このように調整したレイアウトを保存する手段は用意されていないようです。メンテナンスを考えるとレイアウトも保存できると嬉しいですね。(例えばJUDEから読めるモデルとして出力できたら面白いかも)

まとめ

性能の検証とチューニングはシステムを鳥瞰する視点が必要です。つまり、まず全体を見渡し状況を把握し、次にネックとなっている個所にぎゅっとフォーカスします。
ArrowViewを使うと問題の鳥瞰と深堀りが直感的に行えます。ログのオン・オフは簡単にできるので、性能面での問題が明らかになった段階でログを取り、改めてArrowViewでチェックする。こんな使い方が良いでしょう。