例外処理について
どのように例外を扱っていくのか?は悩みどころですね。
例えばHello.say()をリモート呼び出しする時を考えると、
- rmiregitsryに接続できない場合の例外
- そもそもネットワークが確立されていない
- rmiregistryが起動していない
- URL,ポート番号の不一致
- rmiregistryに取得したい参照がない場合の例外
- リモートオブジェクト名称の不一致
- サーバ側でS2Containerにコンポーネントが登録されていない場合の例外
などが簡単に思いつく。
http://d.hatena.ne.jp/higayasuo/20040608#1086651399を参考にすると、基本的に例外はcatchせず、サービスの呼び出し元に伝播させる。
開発時のことを考えると、実行時例外(RuntimeException)はtry-catchやthrowsを強制しないので、考えなしに開発すると、どのような例外が発生するか意識しなくなってしまう。
※まぁ、try-catchでExceptionのみで処理しても同じですが。
まずは、少なくとも実行時例外を発生させる可能性を持つインターフェースはそれを明示する必要があると思います。
プラグインとかで、対象メッソドが発生させる可能性のある例外(実行時例外)を全て検知するようなのがあると便利そうですね。
※もしかしてEclipseに標準で機能があるのだろうか。
後は、上に簡単に例を書いてはみたけど、実際には
- リモート呼び出しの仕組みを準備する時の例外
- 実際のリモート呼び出し時の例外
の2種類がある。
サンプルだと準備して、即実行ですが、システムに組み込んだ場合は
- システム起動(準備)時
- サービス開始時
に明確に段階が分かれるので、例外を扱うポリシーが変わってきそうですね。