Grails NPE在对控制器的所有请求上运行,直到重新编译而不更改代码为止

Grails NPE在对控制器的所有请求上运行,直到重新编译而不更改代码为止,grails,Grails,我正在使用Grails2.0.0。我几天前开始使用webflow插件,今天遇到了一些麻烦。当我运行应用程序并点击使用webflow的控制器时,我得到一个NullPointerException。如果我重新加载,我会得到同样的结果。如果我在控制器源文件中添加了一个空格或者做了任何更改,只需强制重新编译并保存runapp,Grails就会重新编译控制器,后续请求不会出错。不幸的是,我不知道错误是什么时候第一次出现的。我无法将错误追溯到我所做的特定更改 我怎样才能更深入地了解这一点?为什么在运行时重新

我正在使用Grails2.0.0。我几天前开始使用webflow插件,今天遇到了一些麻烦。当我运行应用程序并点击使用webflow的控制器时,我得到一个NullPointerException。如果我重新加载,我会得到同样的结果。如果我在控制器源文件中添加了一个空格或者做了任何更改,只需强制重新编译并保存runapp,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)

通过使用GrailsCreateController创建一个不同名称的新控制器,并将代码从旧控制器复制到新控制器,似乎已经解决了这个问题。无法找到异常的根本原因。'顺便说一句,grails clean并没有修复它