例 2: システム・リソースが使用不可になったら MDB を自動的に停止する
システム・リソースが使用不可になった場合に備えるため、少数のメッセージ障害の後にメッセージ駆動型 Bean (MDB) を自動的に停止して問題についてのアラートを出すようにシステムを構成します。
始める前に
MDB が listen している宛先は、例外宛先を使用する必要があります。 この例外宛先は、システム・デフォルトにするか、または特にその宛先のために構成した宛先とすることができます。
- MDB を含んでいるエンタープライズ・アプリケーション。
- 従属外部システム・リソース。
- 「連続障害メッセージのしきい値」に値 3。 これはメッセージ配信の連続障害の最大数で、その数を超えると MDB が停止します。 このプロパティーは、メッセージの集合に 適用されます。
- 「障害のあるメッセージの再試行間の遅延」に値 5000。 これは、障害のあるメッセージが MDB に送達可能になるまでの時間 (ミリ秒) です。 「連続障害メッセージのしきい値」および最大並行性が 1 に設定されている場合を除き、他のメッセージはこの期間内に送達される可能性があります。
- 「1 メッセージ当たりの最大デリバリー失敗数」に値 5。 これは、その数を超えると、メッセージが本来の宛先から例外宛先に転送される、メッセージ処理試行の失敗の最大数です。 このプロパティーは、個々のメッセージに 適用されます。
このタスクについて
このシナリオでは、エンタープライズまたはビジネス・レベル・アプリケーションは、連続的に実行しているシステムであり、外部システム・リソースにアクセスするために、デプロイされた MDB を使用しています。
外部リソースで問題が発生し、使用可能でなくなると、デプロイされた MDB はそのリソースにアクセスできなくなり、この MDB と関連付けられたトランザクションはロールバックされ、メッセージ msg1 はキューに書き戻されます。
メッセージ msg1 は、「障害のあるメッセージの再試行間の遅延」の設定に従って 5 秒間再試行を遅延するため隠蔽され、それから MDB に対して使用可能になります。
その間に、MDB は、キューの次のメッセージ、msg2 を処理します。 外部リソースはまだ使用不可のままなので、このメッセージの処理でも障害が起こります。メッセージ・トランザクションはロールバックされ、5 秒間隠蔽されます。 キューにある次のメッセージ、msg3 も処理され、障害が起こり、同様に隠蔽されます。
隠蔽されたメッセージの数が「連続障害メッセージのしきい値」に達すると、隠蔽されたメッセージの 1 つが再度使用可能になるまで、MDB はそれ以上のメッセージを処理しなくなります。
msg1 の「障害のあるメッセージの再試行間の遅延」が満了になると、msg1 は隠蔽が解除され、再処理されます。 リソースはまだ使用不可なままなので、再度隠蔽されます。msg2 および msg3 についても同じことが起こります。
メッセージは、「1 メッセージ当たりの最大デリバリー失敗数」限度 (このシナリオでは 5 回) より 1 だけ小さい回数だけロールバックされると、障害メッセージであると見なされます。 したがって、msg1 が 4 回目に隠蔽解除され、 ロールバックされ、再び隠蔽されると、連続障害カウントが増やされます。 その時点で msg2 は隠蔽解除され、ロールバックされ、再び隠蔽されます。同様に、 msg3 は隠蔽解除され、ロールバックされ、再び隠蔽されます。連続障害カウントは「連続障害メッセージのしきい値」に達し、MDB が自動的に停止します。 JCA MBean によって JMX 通知が発行され、 ログ・エントリーがシステム管理者に MDB が停止したことを警告 します。