安全な関係コードの作成

推奨: 関係管理を必要とする属性に関して次の防御コーディング標準を使用してください。

null のソース属性の検査

表 113 内のいずれかのマッピング API を呼び出す前に、ソース属性が null でない ことを確認してください。属性が null の場合、エラーがログに記録され、メソッドを呼び出しません

表 113. null のソース属性の処理
マッピング API メソッド ログに記録するエラー番号 マップの実行を停止しますか?
maintainSimpleIdentityRelationship() 5000
はい

 foreignKeyXref()
 

 foreignKeyLookup()
 
5003
マッピング仕様で、マップの実行を停止するかどうかを指定します。

マップの実行を停止するには、MapFailureException 例外をスローします。

マッピング API メソッドからの例外の処理

表 114 のマッピング API メソッドから発生するすべての例外を確実にキャッチするには、マッピング API メソッドの呼び出しを try/catch ブロックの内部で行い、catch セクションの中で該当するエラー・メッセージをログに記録します。

表 114. マッピング API メソッドからの例外の処理
マッピング API メソッド キャッチする例外 ログに記録するエラー番号

 maintainSimpleIdentity
 Relationship()
 

 maintainComposite
 Relationship()
 
RelationshipRuntimeException 5001

CxMissingIDException 5002
foreignKeyLookup() RelationshipRuntimeException 5007 または 5008
foreignKeyXref() RelationshipRuntimeException 5009

例: 次のコード・フラグメントには、RelationshipRuntimeException および CxMissingIDException 例外の両方をキャッチし、情報メッセージをログに記録してサーバーにより生成されたエラー・テキストを表示し、さらに MapFailureException をスローしてマップの実行を停止する maintainSimpleIdentityRelationship() メソッドの呼び出しが組み込まれています。

try
    {
    // API call
    IdentityRelationship.maintainSimpleIdentityRelationship(...);
    }
  
 catch (RelationshipRuntimeException re)
    {
    logError(5001);
    logInfo(re.toString());
    throw new MapFailureException("RelationshipRuntimeException");
    }
  
 catch (CxMissingIDException ce)
    {
    logError(5002);
    logInfo(ce.toString());
    throw new MapFailureException("RelationshipRuntimeException");
    }
 

例: 次のコード・フラグメントは、RelationshipRuntimeException 例外をキャッチし、情報メッセージをログに記録してサーバーにより生成されたエラー・テキストを表示して、その後、宛先属性が正常にマップされたかどうかを検査する foreignKeyLookup() メソッドの例外処理を示します。宛先属性が正常にマップされない場合、このコード・フラグメントでは、マップが実行を停止する必要がある場合はエラー 5007、マップが実行を継続できる場合は エラー 5008 を表示します。

try
    {
    // API call
    IdentityRelationship.foreignKeyLookup(...);
    }
  
 catch (RelationshipRuntimeException re)
    {
    logInfo(re.toString());
    }
  
 if (ObjDest.isNull("DestAttr")
    {
    logError(5007, "DestAttrName", "SrcAttrName", "RelationshipName",
       "ParticipantName", strInitiator);
    throw new MapFailureException("foreignKeyLookup() failed");
    }
 If the map execution is to be continued, use the following if statement:
 if (ObjDest.isNull("DestAttr")
    {
    logError(5008, "DestAttrName", "SrcAttrName", "RelationshipName",
       "ParticipantName", strInitiator);
    }
 

例: 次のコード・フラグメントは、RelationshipRuntimeException 例外をキャッチして、情報メッセージをログに記録してサーバーにより生成されたエラー・テキストを表示し、その後、宛先属性が正常にマップされたかどうかを検査する foreignKeyXref() メソッドの例外処理を示します。宛先属性が正常にマップされない場合、このコード・フラグメントでは、エラー・メッセージ 5009 を表示し、MapFailureException をスローしてマップの実行を停止します。

try
    {
    // API call
    IdentityRelationship.foreignKeyXref(...);
    }
  
 catch (RelationshipRuntimeException re)
    {
    logInfo(re.toString());
    }
  
 if (ObjDest.isNull("DestAttr")
    {
    logError(5009, "DestAttrName", "SrcAttrName", "RelationshipName",
       "ParticipantName", strInitiator);
    throw new MapFailureException("foreignKeyXref() failed");
    }
 

Copyright IBM Corp. 2004