3

当我尝试将我的 grails 应用程序部署到 WebSphere 8.5 liberty 配置文件服务器时,我收到以下错误消息。

Error Message: javax.servlet.ServletException: Filter [sitemesh]: could not be initialized

我已经为我的应用程序设置了一个父类最后一个类加载策略。相同的war文件部署到位于同一服务器上的tomcat没有问题。关于可能导致此问题的原因以及如何解决此问题的任何想法?我在下面粘贴了完整的堆栈跟踪。

错误页面异常
SRVE0260E: 服务器无法使用为您的应用程序指定的错误页面来处理下面打印的原始异常。


原始例外:
错误消息:javax.servlet.ServletException:过滤器 [sitemesh]:无法初始化
错误代码:500
目标 Servlet:com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor
错误堆栈:
com.opensymphony.module.sitemesh.factory.FactoryException:无法初始化DecoratorMapper:org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“groovyPageLayoutFinder”的bean
     在 com.opensymphony.module.sitemesh.factory.BaseFactory.pushDecoratorMapper(BaseFactory.java:117)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadDecoratorMappers(Grails5535Factory.java:231)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadConfig(Grails5535Factory.java:98)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.(Grails5535Factory.java:66)
     在 org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.init(GrailsPageFilter.java:83)
     在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:142)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:579)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:480)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:299)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:372)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:903)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1036)
     在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4173)
     在 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:302)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.handleRequest(DynamicVirtualHost.java:296)
     在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1006)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$1.run(DynamicVirtualHost.java:253)
     在 com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:457)
     在 com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398)
     在 com.ibm.ws.threading.internal.Worker.run(Worker.java:380)
     在 java.lang.Thread.run(Thread.java:722)
     根本原因:
     org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“groovyPageLayoutFinder”的bean
     在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553)
     在 org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
     在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
     在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
     在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1102)
     在 org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper.init(GrailsLayoutDecoratorMapper.java:48)
     在 com.opensymphony.module.sitemesh.factory.BaseFactory.pushDecoratorMapper(BaseFactory.java:110)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadDecoratorMappers(Grails5535Factory.java:231)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadConfig(Grails5535Factory.java:98)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.(Grails5535Factory.java:66)
     在 org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.init(GrailsPageFilter.java:83)
     在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:142)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:579)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:480)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:299)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:372)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:903)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1036)
     在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4173)
     在 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:302)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.handleRequest(DynamicVirtualHost.java:296)
     在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1006)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$1.run(DynamicVirtualHost.java:253)
     在 com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:457)
     在 com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398)
     在 com.ibm.ws.threading.internal.Worker.run(Worker.java:380)
     在 java.lang.Thread.run(Thread.java:722)




错误页面异常:
错误消息:javax.servlet.ServletException:过滤器 [sitemesh]:无法初始化
错误代码:0
目标小服务程序:
错误堆栈:
com.opensymphony.module.sitemesh.factory.FactoryException:无法初始化DecoratorMapper:org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“groovyPageLayoutFinder”的bean
     在 com.opensymphony.module.sitemesh.factory.BaseFactory.pushDecoratorMapper(BaseFactory.java:117)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadDecoratorMappers(Grails5535Factory.java:231)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadConfig(Grails5535Factory.java:98)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.(Grails5535Factory.java:66)
     在 org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.init(GrailsPageFilter.java:83)
     在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:142)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:579)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:480)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:299)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:372)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:906)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1036)
     在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1383)
     在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:191)
     在 com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:3650)
     在 com.ibm.ws.webcontainer.webapp.WebApp.handleException(WebApp.java:4203)
     在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4184)
     在 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:302)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.handleRequest(DynamicVirtualHost.java:296)
     在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1006)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$1.run(DynamicVirtualHost.java:253)
     在 com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:457)
     在 com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398)
     在 com.ibm.ws.threading.internal.Worker.run(Worker.java:380)
     在 java.lang.Thread.run(Thread.java:722)
     根本原因:
     org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“groovyPageLayoutFinder”的bean
     在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553)
     在 org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
     在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
     在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
     在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1102)
     在 org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper.init(GrailsLayoutDecoratorMapper.java:48)
     在 com.opensymphony.module.sitemesh.factory.BaseFactory.pushDecoratorMapper(BaseFactory.java:110)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadDecoratorMappers(Grails5535Factory.java:231)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.loadConfig(Grails5535Factory.java:98)
     在 org.codehaus.groovy.grails.web.sitemesh.Grails5535Factory.(Grails5535Factory.java:66)
     在 org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.init(GrailsPageFilter.java:83)
     在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:142)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:579)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:480)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:299)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:372)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:906)
     在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1036)
     在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1383)
     在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:191)
     在 com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:3650)
     在 com.ibm.ws.webcontainer.webapp.WebApp.handleException(WebApp.java:4203)
     在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4184)
     在 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:302)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.handleRequest(DynamicVirtualHost.java:296)
     在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1006)
     在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$1.run(DynamicVirtualHost.java:253)
     在 com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:457)
     在 com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398)
     在 com.ibm.ws.threading.internal.Worker.run(Worker.java:380)
     在 java.lang.Thread.run(Thread.java:722)

4

1 回答 1

1

WebSphere 8.5 Liberty Profile 在部署时不会扩展 WAR,令人惊讶的是,相当多的 Web 应用程序严重依赖该特性。这就是导致你的案子的原因。

我很确定您将 Grails Web 应用程序部署为 WAR。

解决方案非常简单 - 部署扩展的 Web 应用程序,问题就消失了。

为了证明我的想法,我运行了2.3 创建应用程序中的示例。当我部署它时,您遇到的错误消息确实显示在浏览器和日志中。

jacek:~/sandbox/helloworld
$ cp target/helloworld-0.1.war ~/apps/wlp/usr/servers/libertyGrails/dropins/

但是,当它询问是否扩展了 Web 存档时,您忽略了日志中的那一行。

原因:java.io.FileNotFoundException:ServletContext 资源 [/WEB-INF/grails-app/i18n/messages.properties] 无法解析为绝对文件路径 - Web 应用程序存档未展开?... 20 更多

rm我重新部署了 Web 应用程序(之后只是一个unzip -d),欢迎页面正确显示。

jacek:~/sandbox/helloworld
$ rm ~/apps/wlp/usr/servers/libertyGrails/dropins/helloworld-0.1.war
jacek:~/sandbox/helloworld
$ unzip -d ~/apps/wlp/usr/servers/libertyGrails/dropins/helloworld-0.1.war target/helloworld-0.1.war
jacek:~/sandbox/helloworld
$ open http://localhost:9080/helloworld-0.1
于 2012-12-23T14:43:00.270 回答