8.12.2. エラー処理
同時要求を対話型コンポーネントに対して行列待ちに入れるよう十分注意をしてアプリケーションを設計しても、 サーバーがオーバーロードとなる危険性はあります。 オーバーロードが発生すると
concurrent-request-timeout の期限が切れるまでに全要求は処理されなくなります。 こうした場合、 Seam は ConcurrentRequestTimeoutException を送出します。これは pages.xml で処理されます。 HTTP 503 エラーの送信が推奨されます。
<exception class="org.jboss.seam.ConcurrentRequestTimeoutException"
log-level="trace">
<http-error error-code="503" />
</exception>
<exception class="org.jboss.seam.ConcurrentRequestTimeoutException"
log-level="trace">
<http-error error-code="503" />
</exception>
注記
現在サーバーは一時的な過負荷またはサーバーメンテナンスのため要求を処理することができません。これは一時的な状態で、しばらく待つと緩和されることを意味しています。
代わりにエラーページにリダイレクトすることができます。
ICEfaces、 RichFaces Ajax、 Seam Remoting はいずれも HTTP エラーコードを処理することができます。 Seam Remoting は HTTP エラーを表示するダイアログボックスを出現させます。ICEfaces はエラーをその接続状態のコンポーネント内に表示します。 RichFaces はユーザー定義が可能なコールバックで HTTP エラーを処理するのに最も完全な対応を行います。 たとえば、 エラーメッセージをユーザーに表示するには以下のようにします。
<script type="text/javascript">
A4J.AJAX.onError = function(req,status,message) {
alert("An error occurred");
};
</script>
<script type="text/javascript">
A4J.AJAX.onError = function(req,status,message) {
alert("An error occurred");
};
</script>
エラーコード以外で、 セッションがタイムアウトしたことによりビューの有効期限切れをサーバーが報告する場合は RichFaces で別のコールバック機能を使用します。
<script type="text/javascript">
A4J.AJAX.onExpired = function(loc,message) {
alert("View expired");
};
</script>
<script type="text/javascript">
A4J.AJAX.onExpired = function(loc,message) {
alert("View expired");
};
</script>
別の方法として、RichFaces にエラーを処理させることもできます。この場合、 ユーザーは「ビューの状態を復元できませんでした、ページを再ロードしますか ?」というプロンプトを受け取ります。 このメッセージをグローバルにカスタマイズするには、アプリケーションのリソースバンドルで次のメッセージキーを設定します。
AJAX_VIEW_EXPIRED=View expired. Please reload the page.
AJAX_VIEW_EXPIRED=View expired. Please reload the page.