6.12.2 例外の種類ごとの処理方法

ここでは,例外の種類ごとの処理方法について説明します。

<この項の構成>
(1) エンドユーザの操作ミスによって発生する例外の処理
(2) ユーザアプリケーションプログラム開発時に発生する例外
(3) Java クラスライブラリが動作する環境が不正な場合に発生する例外
(4) そのほかの例外

(1) エンドユーザの操作ミスによって発生する例外の処理

例外クラスでは,主にエンドユーザの操作ミスによって発生する例外に対応するクラスを提供しています。例えば,ログイン時に入力したユーザ識別子またはパスワードが不正だった場合の処理や,文書空間オブジェクトのプロパティに不正な値を設定しようとした場合の処理などを,業務処理部分から切り分けてコーディングすることができます。

なお,サブクラスとして定義されているクラスで表されるエラーをすべて区別して処理する必要はありません。ユーザアプリケーションプログラムで実現したい例外処理に応じて,クラスを使い分けてください。

例えば,エンドユーザがコンテンツをダウンロードする時,次のような例外が発生する可能性があります。

これらの例外に対して,要因ごとに異なるエラー処理を実行するユーザアプリケーションプログラムを作成したい場合は,それぞれの要因に対応する例外クラスを使用して例外処理を実行します。この場合は,DbjFileAccessExceptionクラスのオブジェクトをキャッチする処理と,DbjFileNotFoundExceptionクラスのオブジェクトをキャッチする処理を分けてコーディングします。

また,この二つのどちらの例外が発生した場合でも,ファイルにアクセスできないことだけを表示するだけでよい場合などには,二つの例外のスーパークラスであるDbjIOExceptionクラスのオブジェクトをキャッチする処理をコーディングします。

このように,実行したい例外処理ごとに,必要に応じて例外クラスのスーパークラスまたはサブクラスを使用してください。

ここでは,ログイン処理で指定したユーザ識別子またはパスワードが不正な場合に発生する例外をキャッチする例を示します。

// 例外処理の例

DbjSession sess = null;
DbjDocSpace docspc = null;
try {
 sess = DbjFactory0200.getFactory().createSession( docspaceid );

 // ログイン処理
 docspc = sess.login( "hitachi", "passwd" );

} catch(DbjNotAuthenticatedException e) {
 // 認証エラーが発生した場合
 System.out.println("Not authenticated");

} catch(DbjException e) {
 // そのほかのエラーが発生した場合
 .....
}

(2) ユーザアプリケーションプログラム開発時に発生する例外

ユーザアプリケーションプログラム開発時には,コーディングのミスによって例外が発生する可能性があります。この場合も,例外クラスのオブジェクトがスローされます。

ただし,コーディングのミスによって発生する例外は,デバッグによって解消される例外です。このため,この例外に対して,ユーザアプリケーションプログラムに細かい例外処理をコーディングする必要はありません。

コーディングのミスによって発生する例外は,すべてDbjExceptionクラスのオブジェクトとしてスローされます。詳細なエラー情報はメッセージとしてsyslogファイル(UNIXの場合)またはイベントログ(Windowsの場合)に出力されます。したがって,ユーザアプリケーションプログラム開発時の例外処理ではDbjExceptionクラスのオブジェクトをキャッチするコーディングをしておいて,必要に応じてメッセージ情報を参照してデバッグを実行してください。

メッセージ情報については,「8. 障害対策」を参照してください。

(3) Java クラスライブラリが動作する環境が不正な場合に発生する例外

データベースでエラーが発生した場合や,TPBrokerでエラーが発生した場合など,環境が不正な場合に発生したエラーは,DbjExceptionクラスのサブクラスである,DbjDBExceptionクラスまたはDbjCORBAExceptionクラスのオブジェクトとしてスローされます。ユーザアプリケーションプログラムでこれらの例外をキャッチした場合には,Java クラスライブラリの動作環境を見直してください。

(4) そのほかの例外

これまでに説明した例外以外に,メモリ不足や内部エラーなど,ユーザアプリケーションプログラムでは対処できない例外があります。これらの例外は,java.lang.ErrorクラスのサブクラスであるDbjErrorクラスのオブジェクトで表されます。このエラーは,直接スローされることはありません。したがって,キャッチする必要もありません。