Я использую Grails 2.0.0.Я начал использовать плагин webflow пару дней назад и сегодня столкнулся с некоторыми проблемами.Когда я запускаю приложение и нажимаю на контроллер, использующий веб-поток, я получаю исключение NullPointerException.Если я перезагрузить, я получаю то же самое.Если я добавлю пробел в исходный файл контроллера (или вообще внесу какие-либо изменения, нужно только принудительно перекомпилировать) и сохраню его с запущенным приложением run-app, Grails перекомпилирует контроллер, и последующие запросы будут работать без ошибок.К сожалению, я не знаю, когда появилась ошибка.Я не смог отследить ошибку до конкретного изменения, которое я сделал.
Как я могу копать глубже на этом?Почему перекомпиляция контроллера во время выполнения исправляет NPE?
Вот код контроллера, который я могу использовать для воспроизведения проблемы:
class ServicesController {
def index() {
redirect(action: "request")
}
def requestFlow = {
selectAssessments {
on("next") {
}.to("productInfo")
on("cancel").to("finish")
}
}
}
А вот журнал консоли:
| Error 2012-03-18 21:43:11,272 ["http-bio-8080"-exec-4] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /project/services/request
Stacktrace follows:
Message: null
Line | Method
->> 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 908 | run in ''
^ 680 | run . . in java.lang.Thread
| Error 2012-03-18 21:43:13,261 ["http-bio-8080"-exec-4] ERROR servlet.GrailsDispatcherServlet - HandlerInterceptor.afterCompletion threw exception
Message: No value for key [org.hibernate.impl.SessionFactoryImpl@57c40e95] bound to thread ["http-bio-8080"-exec-4]
Line | Method
->> 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 908 | run in ''
^ 680 | run . . in java.lang.Thread
| Error 2012-03-18 21:43:14,199 ["http-bio-8080"-exec-5] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /project/services/request - parameters:
execution: e1s1
Stacktrace follows:
Message: null
Line | Method
->> 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 908 | run in ''
^ 680 | run . . in java.lang.Thread
| Error 2012-03-18 21:43:14,262 ["http-bio-8080"-exec-5] ERROR servlet.GrailsDispatcherServlet - HandlerInterceptor.afterCompletion threw exception
Message: No value for key [org.hibernate.impl.SessionFactoryImpl@57c40e95] bound to thread ["http-bio-8080"-exec-5]
Line | Method
->> 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 908 | run in ''
^ 680 | run . . in java.lang.Thread
Из target / stacktrace.log:
2012-03-23 22:00:33,470 ["http-bio-8080"-exec-3] ERROR StackTrace - Full Stack Trace:
java.lang.NullPointerException
at org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewInterceptor.postHandle(GrailsOpenSessionInViewInterceptor.java:75)
at org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter.postHandle(WebRequestHandlerInterceptorAdapter.java:61)
at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:342)
...
2012-03-23 22:00:33,490 ["http-bio-8080"-exec-3] ERROR StackTrace - Full Stack Trace:
java.lang.NullPointerException
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
...
2012-03-23 22:00:36,725 ["http-bio-8080"-exec-3] ERROR StackTrace - Full Stack Trace:
java.lang.IllegalStateException: No value for key [org.hibernate.impl.SessionFactoryImpl@12653c7e] bound to thread ["http-bio-8080"-exec-3]
at org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:209)
at org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor.afterCompletion(OpenSessionInViewInterceptor.java:211)