Deployment tomcat6中的Grails生产战争,热重部署错误:call';刷新';在通过ApplicationContext访问bean之前

Deployment tomcat6中的Grails生产战争,热重部署错误:call';刷新';在通过ApplicationContext访问bean之前,deployment,grails,refresh,tomcat6,war,Deployment,Grails,Refresh,Tomcat6,War,我有一个在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.gro

我有一个在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
org.codehaus.groovy.grails.web.taglib.exceptions.grailstageexception:执行标记时出错:创建名为“org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib”的bean时出错:bean实例化失败;嵌套异常为java.lang.IllegalStateException:BeanFactory未初始化或已关闭-在通过位于/WEB-INF/grails app/views/layouts/baseContainer的ApplicationContext访问bean之前调用“刷新”。gsp:28
在gsp\u应用程序\u布局BaseContainerMapfB\u gsp$\u run\u closure2.doCall(gsp\u应用程序\u布局BaseContainer\u gsp.groovy:42)
在gsp\u应用程序\u布局BaseContainerMapfB\u gsp$\u run\u closure2.doCall(gsp\u应用程序\u布局BaseContainer\u gsp.groovy)
在gsp_应用程序_布局BaseContainerMapfb_gsp.run(gsp_应用程序_布局BaseContainerma_gsp.groovy:49)
位于java.lang.Thread.run(未知源)
原因:org.springframework.beans.factory.BeanCreationException:创建名为“org.codehaus.groovy.grails.plugins.web.taglib.ApplicationAglib”的bean时出错:bean实例化失败;嵌套异常为java.lang.IllegalStateException:BeanFactory未初始化或已关闭-在通过ApplicationContext访问bean之前调用“刷新”
在gsp\u app\u templates\u facebook connect\u gsp.run(gsp\u app\u templates\u facebook connect\u gsp.groovy:23)
... 4更多
原因:java.lang.IllegalStateException:BeanFactory未初始化或已关闭-在通过ApplicationContext访问bean之前调用“刷新”
什么是我没有错?我怎么能称之为“刷新”


在tomcat上重新部署WAR的最佳方法是什么?

我们可能无法在Stackoverflow上解决这个问题。不过,如果你找不到更好的信息,我希望你能给我的支持尝试打分

首先,Grails文档建议在(重新)部署之后使用。但在大多数情况下,这是不必要的

当Tomcat重新加载web应用程序时,Grails
ServletContextListener
会得到关于该事件的通知,并创建(应该创建)连接所有应用程序SpringBean的Grails/Spring
ApplicationContext
(通过使用前面提到的
refresh(…)
方法,顺便说一句)。你的情况就错了

通常,在热部署之后,您只需等待一段时间,直到
ApplicationContext
完全可用,但最终应该在一段时间之后。在这两种状态之间,您的错误是正常的。(现在已经有相当一段时间)让Spring的
DispatcherServlet
等待第二种状态,即使在此之前有请求。因此,这被认为是一种改进,而不是一个bug

至于Tomcat本身的部署过程,请参阅。默认情况下,热部署应该像覆盖现有WAR文件并让Tomcat解包一样简单,但这可以在conf/server.xml中的
标记上进行自定义

其他想法:

  • 我猜您在重新部署后确实等待了足够长的时间,以确保仅在有限的时间内不会发生错误
  • 你可以发布完整的stacktrace
  • 在WAR的web.xml文件中,是否有任何
    不属于命名空间
    org.codehaus…
  • 您是否使用任何特殊的插件、版本、规格
  • 如果您已经在Tomcat中设置了虚拟主机,请查看
    autoDeploy
    unpacwar
    设置

重新加载了WAR,等待了15分钟,没有任何请求,但仍然出现了完全相同的错误,关于web.xml名称空间,在org.springframework.filter上,还有另外两个提到了springSecurityFilterChain和charEncodingFilter。堆栈几乎就如我所说的那样结束了,似乎是taglib bean org.springframework.beans.factory.BeanCreationException:创建名为“org.codehaus.groovy.grails.plugins.web.taglib.validationTaglib”的bean时出错。关于插件,Recaptcha、tomcat、mail、spring security、quartz和cookie,quartz会有什么影响吗?不幸的是,我不知道我可以看到两种调试问题的策略:1。细化测井输出;日志:$CATALINA_HOME/logs/*,$CATALINA_HOME/stacktrace.log,日志设置在log4j配置中。-2.从一个“纯”的Grails应用程序开始,在你的应用程序中的某个地方,有一个软件/配置可以改变这个问题毕竟,您可以重新启动Tomcat;根据网络应用程序的不同,这可能需要不到半分钟的时间。