私のアプリケーションは grails 2.3.1 で動作します。数日前、エラー コントローラの奇妙な動作に気付きました。Grails はエラー コントローラを呼び出しますが、request.exception は null です。これは、アプリケーションが grails 2.2.x から 2.3.x に更新され、非同期コントローラーの使用を開始した後に発生したようです。私のコントローラー:
package grailsapp
import static grails.async.Promises.task
class MyController {
def controllerAction(ActionCommand command) {
task {
// Controller code
}
}
}
また、コントローラーコードに難しい計算が含まれている場合にのみ発生し、長い時間 (約 30 秒) がかかります。
Grails async なしでコードを実行しようとしましたが、完璧に動作します。また、try\catch を使用してタスク内にコードをラップしようとしましたが、何も変更されていません。catch セクションは何もキャッチしていません。
package grailsapp
import static grails.async.Promises.task
class MyController {
def controllerAction(ActionCommand command) {
task {
try{
// Controller code
} catch (Exception e){
e.printStackTrace()
// Nothing caught here
}
}
}
}
アクションメソッド本体全体をラップしようとしましたが、同じ結果です。
package grailsapp
import static grails.async.Promises.task
class MyController {
def controllerAction(ActionCommand command) {
try{
task {
// Controller code
}
} catch (Exception e){
e.printStackTrace()
// Nothing caught here
}
}
}
誰かが助けて、なぜそれが起こるのか説明できますか?