2013年3月29日金曜日

エラー(Exception)のハンドリング方法 Webアプリ(Java)編

GeneXusではデータベースI/O時の予期せぬエラー(SQLException)はError_Handlerルールがサポートされていますが(エラー(Exception)のハンドリング方法 DB編を参照)、アプリケーション上の予期せぬエラー(Exception)はサポートされていません。

これはアプリケーション上の予期せぬエラー(nullポインタや0割りなどは)はバグの範疇でありデバッグした上でのリリースが前提となる。という事と、GeneXus言語としては昨今のExceptionを利用した論理的なエラーを通知する仕組みをサポートしていないためです。
(ジェネレート対象となる言語にCOBOLやRPGといったExceptionをサポートしていない言語があるため)




従って、アプリケーション上で予期せぬエラー(Excpetion)が発生した場合はGeneXusアプリケーションがキャッチできないため、いわゆるスタックトレースという素のエラー画面が表示されてしまいます。

エラー画面(スタックトレース)

とはいえ、実際にアプリケーションを本番運用する場合には、もし万が一予期せぬエラーが発生した場合にもエンドユーザーを混乱させずに、しかるべきオペレーションを促すために予め用意したシステムエラー画面へ遷移させたいものです。

ここではJava環境における予期せぬエラー(Exception)のハンドリングの実装方法を紹介します。

1.基本的な考え方

GeneXusアプリケーションではExceptionがキャッチできませんので、APサーバー側でキャッチしシステムエラー画面へ遷移する方法をとります。

2.システムエラー画面を用意する(HTML、JSP、Webパネルなど)

目的と方針に応じてシステムエラー画面をそれぞれの言語で実装します。一般的にはそれぞれの特性で選択します。
・HTML(静的なシステムエラー画面)
・JSP(動的なシステムエラー画面)
・Webパネル(動的なシステムエラー画面 : GeneXusで作成)

3.APサーバーの設定

HTTP500エラー(Internal Server Error)発生時のリダイレクト先を2で作成した画面(URL)を設定します。

例) TOMCAT
web.xmlにて以下のエントリを追加します。locationタグに遷移したいページのURLを指定します。
<error-page>
         <error-code>500</error-code>
         <location>/SystemError.jsp</location>
</error-page>


4.テスト

Webパネルを作成し、故意にExceptionを発生させるイベントコードを記述します。ビルド・実行してExceptionが発生したらエラー画面に遷移する事を確認します。

例)
4-1.Zero divided(0割り)

&val1 = 1
&val2 = 0
&result = &val1 / &val2

4-2.Out of bounds array exception(配列のインデックス指定が範囲外)

&item = &collection.item(-1).member
   ※&collectionはコレクション変数





[注意]当ブログの投稿はあくまでも情報提供であり、動作の保証をするものではありません。また当情報を元にした実装により何らかの問題が発生した場合でも当方は一切の保証は致しません。

0 件のコメント:

コメントを投稿