メディエーション・プログラミングのコーディングのヒント
メディエーション・コードを作成する場合に役立つプログラミングのヒント。
- 転送ルーティング・パスでループが発生しないように注意してください。例えば、現行宛先と同じ宛先をパスに設定すると、 メッセージが無限に循環し、そのたびにルーティング・パスが現行の宛先にリセットされます。 メディエーション・フレームワークでは、ルーティング・パスのループはチェックされません。
- 静的フィールドの使用はできる限り避けてください。 単一のメディエーションがデプロイされ、複数のメッセージが並行して処理される場合があります。
- メッセージ・コンテキストまたはメッセージ内容から計算される値はキャッシュに入れないでください。これらの値はメッセージ間で変更される可能性があります。例外として、 パフォーマンスを向上させるために、メディエーション・ハンドラー・プロパティーからのみ 派生する値をキャッシュに入れる場合があります。
- メディエーション・プログラミングには、EJB のプログラミングと同様の制限が課せられます。 これらの制限については、EJB 1.1 仕様書のセクション 18.1.2 に記載されています。
- メディエーションには、適切なレベルのトランザクション・コントロールを選択してください。 例えば、メッセージ内のフィールドを操作するメディエーションでは、 トランザクション・コントロールの意味はないと考えられます。 一方で、データベース・フィールドを更新するメディエーションでは、トランザクション・コントロールが必要とされ、 メディエーション定義に UseGlobalTransaction フラグを設定するように管理者に注意する必要があります。このフラグはデフォルトで False に設定されています。
- 特にメッセージ・フォーマットに適用されるヒント
- メディエーションの機能がメッセージを操作した後に、メッセージ が引き続き予期されるフォーマットに準拠しているかを確認することは、良い実施例です。SIMessage インターフェースの isWellFormed メソッドを使用して、メッセージ・プロパティーの値をすべてシリアライズすることができること、 およびメッセージのデータ・グラフがメッセージのフォーマットに準拠していることを、 確認する必要があります。
- メッセージの処理方法に応じて、一般的なフォーマットを受け入れるのではなく、 個別のニーズを満たすフォーマットを指定することができます。例えば、SOAP メッセージをバイト・ストリングとして扱う場合は、SIMessage インターフェースの getNewDataGraph メソッドを使用して、JMS/bytes のフォーマットを指定します。getNewDataGraph は、SIMessage ペイロード・コンテンツのコピーを含む新規 SDO データ・グラフを、フォーマット・フィールドによって指定されたツリー表現で返します (この例では、バイト・ストリング表現)。
- メディエーション・コードのメッセージ・フォーマットをチェックすることをお勧めします。 これは、メディエーションで、予期しないフォーマットのメッセージを正しく処理できない場合があるためです。SIMessage インターフェースの getFormat メソッドを使用してください。
- メディエーションによってサポートされている SDO のバージョンは バージョン 1 のみです。
- メッセージに対する SDO ユーザー・インターフェースの制限により、メッセージ・アクセス・メソッドには
‘throws' 文節がありません。このため、構文解析エラーが原因でアクセス・メソッドによってスローされる例外は、
非検査例外になります。com.ibm.websphere.sib.exception
パッケージの例外クラス SIMessageParseException
を検査することにより、メディエーションで構文解析例外をキャッチすることができます。以下の例に類似したコードを使用します。
try { // Function involving SDO message access } catch (SIMessageParseException e) { // Look at the real cause of the runtime exception, and act on it. // It is likely to indicate a parse failure... Throwable cause = e.getCause(); }
注: メディエーションが SIMessageParseException をキャッチしない場合は、メッセージのオリジナル・バージョンが例外宛先に送信されます。 - メディエーションをデプロイする際には、ハンドラーおよびハンドラー・リストに覚えやすく内容を伝えやすい名前を指定してください。
- 単一の宛先に単一のメディエーションをデプロイする場合には、 メディエーション・ハンドラー、メディエーション・ハンドラー・リスト、 および管理コンソールのメディエーション・オブジェクトに完全に同じ名前を使用してください。
- パフォーマンス上の理由から、宛先を通過するメッセージのみからなる必要なサブセットを メディエーションが仲介するように、セレクター・ルールを指定してください。