- PR -

EJB内で発生したエラーをクライアントが捕捉する方法

1
投稿者投稿内容
masaki
常連さん
会議室デビュー日: 2001/12/10
投稿数: 26
投稿日時: 2001-12-10 18:06
 初めての投稿となります。現在J2EEの技術評価を行っている者です。

JSP+Servlet+EJB(Statuful Session Bean)という典型的なMVCパターンで簡単な
サンプルを作成しているのですが、自分で定義したカスタムExceptionをEJB側でthrowさせ、
Servlet側で例外に応じた処理の振分を行いたいと考えています。
しかし「Enterprise BeanからはRemoteExceptionしか例外を返すことができない」という
話をどこかで聞きました(ソースは忘れてしまいましたが)。
また現時点では確証がないのですが、一度EJB側で例外を発生させると、クライアント側の
sessionで保持しているRemoteインターフェイスへの参照が切断されてしまうようで、
例外発生後にそのままRemoteインターフェイスにアクセスしようとすると、org.omg.CORBA.OBJECT_NOT_EXIST例外が発生してしまいます。

そもそもBean側で例外を発生させてクライアントにエラーを通知するという方法は、
EJBでは推奨されない手法なのでしょうか?
またそうである場合、EJB側で発生した障害の内容(詳細)は、通常どのようにして
クライアント側に通知してあげればよいのでしょうか?
EJBでの「作法」についてどなたかご指導頂ければと思っています。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2001-12-11 15:42
>Enterprise BeanからはRemoteExceptionしか例外を返すことができない」という
>話をどこかで聞きました(ソースは忘れてしまいましたが)。

そんなことはありません。アプリケーション例外を定義できます。
ただし、その場合、インタフェースのthrows節に宣言する必要があります。

詳しくは、EJB 2.0仕様18章をごらんください。
個々の例外の種類が詳しく表になっていますし、システム例外時にコンテナがインスタンスを破棄することなどの説明があります。必見です。

>EJB側で発生した障害の内容(詳細)は、通常どのようにして
>クライアント側に通知してあげればよいのでしょうか?
>EJBでの「作法」についてどなたかご指導頂ければと思っています。

RemoteExceptionのハンドリングは煩雑なので、クライアント側でこの処理を隠すライブラリを用意するのが良いと思います。

[ メッセージ編集済み 編集者: miki 編集日時 2001-12-13 09:45 ]
1

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