ResourceSynchronizer 0.0.3 リリース

Ext.jsのコンポーネント群が余りに素晴しいので、
自分でも使ってみたくなって作り込んでみましてん。
去年辺り、どこかで、エラー画面は贅沢な方がイイヨネ。
とかそんな話があったのを思い出して、無駄にリッチなエラー画面を作り込んで見ました。


ちなみに、以下の Update サイトからインストールすることができます.
http://eclipse.seasar.org/updates/3.3/

現在のリリースでは、以下の実行環境でのみ、適切に動作します.

です。


今回追加した機能は、エラー画面を出力するJSPを新規作成するウィザードです。
エラー画面は、

で動作確認しました。


ファイルの新規作成ウィザードで、
ResourceSynchronizerグループにある「Debug JSP」を選択してウィザードを開始して下さい。


ウィザードでは、以下の項目を設定して下さい。


Browseボタンをクリックすると、ディレクトリを選択する為のダイアログが起動します。


「Context Root dir」を選択すると、自動的に「Output dir」が設定されます。
デフォルトでは、「Context Root dir」のサブディレクトリとして「error」と言うディレクトリが設定されます。


二つの項目を設定したら、「Finish」ボタンを押します。
そうすると、リソースの生成処理が開始されます。


以下の様にリソースが生成されます。


次に、エラー画面を出力する為のJSPを作成します。
ここでは、サンプルとして「bugbug.jsp」を作成しました。

「bugbug.jsp」の内容は以下の様になっています。
このコードでは、6行目でNullPointerExceptionが発生する筈です。

<%@ page contentType="text/html; charset=UTF-8"  errorPage="/error/debug.jsp" %>
<html>
<body>
<%
 java.util.Hashtable map = new java.util.Hashtable();
 out.println(map.put(null,null));
 %>
</body></html>

WTPやSysdeoTomcatPluginを使う等して、
当該JSPを含むプロジェクトをサーブレットコンテナにデプロイした上で、
eclipseのInternalWebBrowserを使用し当該JSPにアクセスします。
InternalWebBrowserは、特別なツールを使っていない限り、
Window > Show View > Other... > General > InternalWebBrowser
で開く事が出来ます。


このエラー画面では、以下の情報をブラウザだけで確認する事が出来ます。

  • StackTrace
    • 発生した例外を、Grid表示します。
  • HTTP
    • ContextPath(コンテキストパス)
    • RequestURI(エラー画面を表示する元となったHTTPリクエストのリクエスURI
      HttpServletRequestに「javax.servlet.error.request_uri」をキーに設定されている値
    • RuquestMethod(エラー画面を表示する元となったHTTPリクエストのHTTPリクエストメソッド)
  • Request Parameters
    • エラー画面を表示する元となったHTTPリクエストのURLデコードされたHTTPリクエストパラメータの一覧
  • Http Headers
    • エラー画面を表示する元となったHTTPリクエストのHTTPヘッダの一覧
  • Cookie
    • 当該ホストとやりとりされているHTTPクッキーの一覧
  • Java
  • Request Attributes
    • エラー画面を表示する元となったHTTPリクエストのHttpServletRequest#getAttributeで取得出来る値の一覧
  • Session Attributes
    • エラー画面を表示する元となったHTTPリクエストに紐付くHttpSession#getAttributeで取得出来る値の一覧
  • Application Attributes
    • エラー画面を表示する元となったHTTPリクエストを送信したサーブレットコンテナ内にあるServletContext#getAttributeで取得出来る値の一覧

StackTraceはデフォルトで表示されていますが、それ以外の項目は、
左側のMenuにあるツリーをクリックする事でStackTraceのタブの右側に新しいタブとして表示されます。
又、StackTrace以外の表示項目はGridの上部にあるテキストフィールドに文字を入力する事で、
Grid内のキーを部分一致でフィルタリングする事が出来ます。


表示されているタブのコンテキストメニューとして、2つの機能があります。


StackTraceに表示されたGridの行をダブルクリックするか、
行の左端にあるアイコンをクリックすると、
エラー画面とResourceSynchronizerがHTTP通信を行う為
以下の様なローディングメッセージが表示されます。


ここでResourceSynchronizerは、ダブルクリックされた行をエディタで開こうとします。
ソースコードが存在しない場合等、
ResourceSynchronizerが、ソースコードを発見出来なかった場合、特に何も起きません。


この場合、java.util.Hashtableのコードが存在する為、
NullPointerExceptionが発生した394行目がJavaエディタで開きました。


更に、エラー画面には、StackTraceの中で、ダブルクリックされた行のソースコードシンタックスハイライトされた状態で表示されます。
デフォルトでは、トレースで表示されている行番号の前後10行が出力されます。


これらの振る舞いは、エラー画面左側下段にある「Settings」をクリックして、
その内容を表示した上でカスタマイズする事が出来ます。

  • CodeLineSize
    • 前後何行のコードをエラー画面内に表示するか設定出来ます。
      つまり、基本的には、設定された値のおよそ2倍の行がStackTraceの行に表示される事になります。
  • OpneInEclipse
    • デフォルト値はtrue。falseに設定する事で、eclipse内のウィンドウでスタックトレースに表示されたクラスを開かない様にできます。