@RequestMapping でマッピングされたメソッドを持つコントローラーがあり、JSON 形式のオブジェクトを返すため、@ResponseBody も含まれます。返す必要があるオブジェクトを取得することの一部は、生産者/消費者タイプの状況でのオブジェクトの wait() です。
もちろん、クライアントはいつでもリクエストをキャンセルできますが、クライアントがキャンセルしたときにコントローラーが実行している wait() コマンドを中断できるようにしたいと考えています。現在、ajax リクエストは statusType タイムアウトでクライアント側のエラーをスローし、クライアント側で処理できます。しかし、クリーンアップしたいスレッドがサーバー側で待機しているようです。
しかし、どのように?
古い Web アプリで Socket Closed タイプのエラーが発生したことを思い出したようですが、WebLogic 10.3 のこの Spring 3 アプリでは発生していません。
コントローラーが待機中に座っている間にクライアント要求がキャンセルされると、次のようなログが表示されます():
" <[STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "623" seconds for working on the request etc..."