例外処理

例外 とは、マップ内で明示的に処理されない場合に、マップの実行を停止する事象の発生です。

マップの実行中に、実行時例外が発生することがあります。カスタム変換規則を定義する場合は、「Catch Error」関数ブロックを使用すれば、実行時例外をトラップできます。 特定の例外をキャッチすると、この例外の処理方法を判別できます。

関係例外

マップに関係を使用すると、いくつかの例外が発生することがあります。これらの例外はすべて RelationshipRuntimeException のサブクラスです。

例外の種類は特に考慮せず、単にすべてをキャッチする場合は、RelationshipRuntimeException をキャッチします。あるいは、特定クラスの次のいずれの例外でもキャッチできます。

図 86 に、関係の実行時例外の階層を示します。キャッチするどの例外も、下位の階層の例外を自動的にキャッチします。しかし、下位の階層の例外がスローされた場合、特別にそれをキャッチしないと、どの例外がスローされたかを正確に識別することはできません。

図 86. 関係の実行時例外

例: RelationshipRuntimeUserErrorException をキャッチすると、RelationshipRuntimeMetaDataErrorExceptionRelationshipRuntimeGeneralUserErrorException も自動的にキャッチします。しかし、例外を演算子 instanceof でテストしない限り、これらのうちのどれが実際にスローされたのかは簡単に認識できません。キャッチする例外は、例外をどのように処理するかにより異なります。

例: 重複する関係インスタンス ID の処理

addMyChildren() または create() メソッドを使用して参加者を一致関係に追加する場合、すでに存在する関係インスタンス ID を渡すと、RelationshipRuntimeDuplicateIdentityEntryException がスローされます。 この例外では、重複を発生させた関係インスタンス ID を検索する getInstanceId() メソッドも使用します。

例: 次の例で、この例外をキャッチして ID を検索する方法を示します。

int instanceId;
  
 try
    {
    instanceId = Relationship.create(myParticipantObj);
    }
 catch (RelationshipRuntimeDuplicateIdentityEntryException rrdiee)
    {
    /*
    ** There already is a relationship instance with this
    ** entry, grab the instanceId from the exception
    */
    instanceId = rrdiee.getInstanceId();
    }
 
 

Copyright IBM Corp. 2004