サーバスタブでは、HOLON 構造化例外の CATCH 漏れを防ぐため、default の CATCH を自動生成しています。この default
の CATCH 文に制御が渡ると、クライアントに CORBA_NO_MEMORY 例外を投げて、ユーザにバグを通知するという機能です。
クライアントスタブでは、CORBA システム例外が発生した場合、HOLON 構造化例外を使ったエラー処理を実現するため、該当する CATCH
文をサーチして例外を投げる機能を実装しています。
サーバスタブ上のサーバコンポーネントから、他のサーバコンポーネントを呼び出す(つまり、呼び出すクライアントスタブを使う)場合、呼び出すオペレーションが障害等により閉塞していると
CORBA システム例外が発生します。このとき、クライアントスタブは、該当する CATCH 文をサーチするのですが、サーバスタブが自動生成した
default の CATCH をサーチして例外を投げます。
サーバコンポーネントA
サーバスタブA
↑
↓
クライアントスタブA
(1) CORBA システム例外を検出すると、
(2) 該当する CATCH 文をサーチするが、
(3) サーバスタブの default の CATCH にヒットし、
(4) longjmp する。
サーバコンポーネントB
サーバスタブB
(5) default の CATCH 文(setjmp) に制御が渡され、
(6) クライアントに CORBA_NO_MEMORY 例外を投げる。
↑
↓
クライアントスタブB
(7) CORBA_NO_MEMORY が捕捉される。
したがって、サーバスタブBにおいてキャッチした例外は、クライアントスタブが THROW したものになります。CORBA システム例外の場合、式を省略した
THROW となり、default の CATCH 文に制御を渡すことになります。
|