我有一个grails WAR可以在tomcat6中生产,但是当我去重新部署WAR时,我会覆盖WAR文件。应用程序重新加载,我可以加载首页(静态页面),但是当我尝试转到任何其他页面时,我收到此警告。
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <g:render>: Error creating bean with name 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib': Instantiation of bean failed; nested exception is java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext at /WEB-INF/grails-app/views/layouts/baseContainer.gsp:28
at gsp_app_layoutsbaseContainerMapFb_gsp$_run_closure2.doCall(gsp_app_layoutsbaseContainer_gsp.groovy:42)
at gsp_app_layoutsbaseContainerMapFb_gsp$_run_closure2.doCall(gsp_app_layoutsbaseContainer_gsp.groovy)
at gsp_app_layoutsbaseContainerMapFb_gsp.run(gsp_app_layoutsbaseContainerMa_gsp.groovy:49)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib': Instantiation of bean failed; nested exception is java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at gsp_app_templates_facebookConnect_gsp.run(gsp_app_templates_facebookConnect_gsp.groovy:23)
... 4 more
Caused by: java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
我没有错?我怎么称之为所谓的“刷新”?
什么是在tomcat上热重新部署WAR的最好方法?
答案 0 :(得分:2)
我们可能无法在Stackoverflow解决此问题。但是,如果您找不到更好的信息,我希望您能对我的支持尝试进行评分。
首先,Grails文档在(重新)部署之后向restart Tomcat建议。但在大多数情况下,这不应该是必要的。
当Tomcat重新加载Web应用程序时,Grails ServletContextListener
会收到有关该事件的通知,并创建(应该创建)连接所有应用程序的Spring bean的Grails / Spring ApplicationContext
(使用前面提到的{ {1}}方法,BTW)。这样你的情况就出错了。
通常,在热部署之后,您只需要等待一段时间,直到refresh(..)
完全可用,但最后应该是一段时间之后。在这两种状态之间,您的错误将是正常的。 Spring is working on the problem(现在已经有一段时间了)让Spring ApplicationContext
等待第二个状态,即使请求在此之前进入。所以这被认为是改进,而不是错误。
关于Tomcat本身的部署过程,请参阅Tomcat documentation。默认情况下,热部署应该像覆盖现有WAR文件并让Tomcat解压缩一样简单,但可以在 conf / server.xml 中的DispatcherServlet
标记上进行自定义。 / p>
其他想法:
<Host>
个或<listener>
不属于命名空间<filter>
? org.codehaus...
和autoDeploy
设置。