2012-04-12 1 views
2

アプリケーションを開発中です。通常、ランタイム例外が発生した場合(nullポインタ例外など)ポートレットを一時的に無効にしました。しかし、何とか私のアプリケーションは、キャッチされていないエラーでは失敗しませんが、何も間違っていないかのようにページをレンダリングします(巨大なスタックトレースをコンソールに吐き出す)。なぜこれが悪いのだろうと思うかもしれません。Websphere Portalポートレットは例外の発生後に失敗し、リロード時にすべてのイベントを再取得します。

ボタンアクションメソッドでエラーが発生し、特定の入力フィールドが空の場合にはNullPointerExceptionになりました。さらに、このアクションメソッドでは、いくつかの情報がDBに挿入されました。ウェブフォームが黙って失敗したので、私はボタンを数回押しました。次に、入力欄にデータを入力し、もう一度ボタンを押しました。アクションハンドラメソッドは、NullPointerExceptionをこれ以上スローしません。

しかし、ハンドラメソッドは6回実行されました(失敗した送信ごとに1回+ 1回)。 明らかに、NullPointerExceptionを引き起こしたActionEventはアクションキューから削除されず、後続の要求で再取得されました。アプリケーションが想定通りに無効になった場合、これは問題ではありません。

誰もがこれを手伝ってくれますか?私は捕捉されなかった例外でポートレットを再度失敗させるか、レスポンスフェーズをレンダリングした後にフェイスイベントキューをクリアする何らかの方法を取る必要があります。

答えて

0
  1. 実際にNPEが発生するブレークポイントを設定します。
  2. デバッグモードでサーバを起動します。
  3. サーバーがブレークポイントで停止すると、スタックを見て呼び出しのチェーンを確認します。あなたのNPEを「飲み込んでいる」かもしれません。

このようなことは、通常、カスタム設計のポートレット開発フレームワークに対して開発する場合に発生します。そのフレームワークの設計上の欠陥が、アクションの不適切な例外処理につながる可能性があります。私はこれまでこのようなカスタムフレームワークを見てきました。

関連する問題