- PR -

EJB内のエラー処理

1
投稿者投稿内容
tt
会議室デビュー日: 2002/07/24
投稿数: 6
投稿日時: 2002-07-24 15:29
サーブレットの場合は、エラーをcatchしたら、
RequestDispatcherでエラー表示用JSPにforwatdしていますが、
Bean内でエラーになった場合はいったいどうされていますか?

JSPでコンボ作成のHTMLをプロパティで返すEJBをuseBeanしていますが、
EJBでDBエラーが発生した場合、エラーフラグプロパティをONします。
でも、このプロパティをJSP側で拾って(getProperty)、
エラーの時はエラーJSP、エラーなしの時は、そのままHTML表示と
分岐する方法が見つけられませんでした。
SCRIPTを使わなければいけないのでしょうか?
エラー処理のことを考えたら、サーブレットを使った方がいいんでしょうか?

大変初歩的なことですみません。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-07-24 17:04
>サーブレットの場合は、エラーをcatchしたら、
>RequestDispatcherでエラー表示用JSPにforwatdしていますが、
>Bean内でエラーになった場合はいったいどうされていますか?

JSPから直接EJBを参照するのは得策ではありません。

JSPからEJBを直接参照すると、EJBをハンドリングするためのコードがクライアントコード内に点在するはずです。EJBのエラー処理は煩雑ですし、EJBの変更がクライアントにできるだけ影響しないように、EJBまわりのコードはクライアント内部では局所化した方がよいでしょう。

通常はEJBアクセスの部分のコードをライブラリ化して、EJBへのアクセスの層とプレゼンテーションの層を分離します。このライブラリの中でJNDIへのアクセスをおこなったり、EJBの例外をキャッチしてクライアント例外に変換してスローし直したりします。こうすることで、このライブラリの利用者はEJBのAPIの知識がなくてもEJBを操作できるようになります。

このライブラリをJavaBeanとして実装することは可能でしょう。

>JSPでコンボ作成のHTMLをプロパティで返すEJBをuseBeanしていますが、
>EJBでDBエラーが発生した場合、エラーフラグプロパティをONします。

EJB実装内部ですべてのエラーをキャッチしてプロパティをONにすることは不可能です。

EJB実装で発生する例外はDBエラーだけとは限りません。JSP<->EJB間で通信エラーが発生することもあるでしょうし、バグによるシステム例外が発生してトランザクションがrollbackすることもあるでしょう。つまり、このような作りは思ったようには機能しません。

>このプロパティをJSP側で拾って(getProperty)、
>エラーの時はエラーJSP、エラーなしの時は、そのままHTML表示と
>分岐する方法が見つけられませんでした。

JSPの実体はServletですから、Javaのコードを埋め込めば大抵のことはできます。
しかし、JSPがJavaコードだらけになったら、何のためのJSPかわかりません。

>エラー処理のことを考えたら、サーブレットを使った方がいいんでしょうか?

そうでしょうね。



tt
会議室デビュー日: 2002/07/24
投稿数: 6
投稿日時: 2002-07-24 18:27
返答ありがとうございます。

>JSPからEJBを直接参照すると、EJBをハンドリングするためのコードがクライアントコー
>ド内に点在するはずです。EJBのエラー処理は煩雑ですし、EJBの変更がクライアントに
>できるだけ影響しないように、EJBまわりのコードはクライアント内部では局所化した方
>がよいでしょう。

>通常はEJBアクセスの部分のコードをライブラリ化して、EJBへのアクセスの層とプレゼ
>ンテーションの層を分離します。このライブラリの中でJNDIへのアクセスをおこなった
>り、EJBの例外をキャッチしてクライアント例外に変換してスローし直したりします。
>こうすることで、このライブラリの利用者はEJBのAPIの知識がなくてもEJBを操作できる
>ようになります。
>このライブラリをJavaBeanとして実装することは可能でしょう。

Java初心者なので、理解するのが難しいのですが、
「EJBの例外をキャッチしてクライアント例外に変換してスローする」
方法は、以下で見つけることができました。
http://www.kt.rim.or.jp/~s-matsu/sub/prog/unskill035.html

>>エラー処理のことを考えたら、サーブレットを使った方がいいんでしょうか?
>そうでしょうね。

JSPからサーブレットを呼ぶのも初心者にはハードルが高いと感じました。
HTMLのFORMのactionにサーブレットのリンクを貼るのは簡単なのですが、
コンボの表示ですから、ユーザーがボタンを押してからではなく
勝手に(?)サーブレットに行かないといけません。
スクリプトレットでサーブレットを呼ぶ処理を書こうとすると、
サーブレットからサーブレットを呼ぶ(サーブレットチェーン?)で
なんだか大変な響きがして、すごい壁を感じてしまいました。
そして、useBeanでパパッと使えるBeanでプログラムを作り始めたのですが
「あ!エラー処理...」ととまってしまいました。

DBのテーブルを参照してHTMLを作るだけのBeanなので、
たいしたことはないのですが、mikiさんの言われるような方法で
ちゃんとエラーを拾わないとユーザーに変な画面を見せることになりますね。

まず、
「EJBの例外をキャッチしてクライアント例外に変換してスローする」
処理を作ってみたいと思います。

丁寧にご教授頂き、本当に感謝します。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-07-24 19:31
どうやらEJBとJavaBeanを混同されているようですね。
EJBとJavaBeanはまったく別物です。
言葉は正しく使いましょう。
tt
会議室デビュー日: 2002/07/24
投稿数: 6
投稿日時: 2002-07-25 14:13
すみません。よく勉強します。

throwの部分、コードの書き方はたくさん資料があったのですが、
それがその後、どうなっているのかがさっぱり検討がつかないのですけど、
throwしたエラーはJSPでどうやって受けとるんですか?
1

スキルアップ/キャリアアップ(JOB@IT)