我有一个可以在tomcat6中生产的grails WAR,但是当我重新部署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的最佳方法是什么?
最佳答案
我们可能无法在Stackoverflow上解决此问题。但是,如果找不到更好的信息,希望您对我的支持尝试进行评分。
首先,Grails文档建议在(重新)部署后使用restart Tomcat。但这在大多数情况下不是必需的。
当Tomcat重新加载Web应用程序时,Grails ServletContextListener
会得到关于该事件的通知,并创建(应该创建)Grails / Spring ApplicationContext
,以连接所有应用程序的Spring Bean(通过使用上述refresh(..)
方法BTW)。在您的情况下,这是错误的。
通常,在热部署之后,您只需要等待一会儿,直到ApplicationContext
完全可用,但最终应该要过一段时间。在这两种状态之间,您的错误将是正常的。 Spring is working on the problem(现在已经有一段时间了),即使请求在此之前进入,Spring的DispatcherServlet
也会等待第二个状态。因此,这被认为是改进,而不是错误。
至于到Tomcat本身的部署过程,请参阅Tomcat documentation。默认情况下,热部署应该和覆盖现有的WAR文件并让Tomcat解压缩一样容易,但是可以在conf / server.xml中的<Host>
标记上对其进行自定义。
其他想法:
<listener>
的任何<filter>
或org.codehaus...
? autoDeploy
和unpackWAR
设置。 关于deployment - 在tomcat 6中导致Grails生产WAR,热重新部署错误:在通过ApplicationContext访问bean之前,请调用 'refresh',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144856/