首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebLogic 12c上JSF 2中的堆栈过流错误

WebLogic 12c上JSF 2中的堆栈过流错误
EN

Stack Overflow用户
提问于 2017-07-05 18:09:08
回答 1查看 1.3K关注 0票数 1

我正在开发一个由遗留JSP、servlet代码和新JSF代码组成的应用程序。我遇到了一个无法解决的StackOverlow错误。有没有人看到或经历过类似的情况,并能帮助我在这种类型的混合JSP/JSF应用程序中找到正确的方向?

我很确定JSF框架试图在一个非JSF页面上做一些事情,并且在JSF框架中陷入了一个递归循环。我在集群WebLogic 12.1.3环境中使用JSF2.1.20。我不会在EAR或WAR文件中捆绑任何JSF库,而是使用所有东西的服务器版本。

我做了相当多的搜索,并发现了其他类似的问题,但到目前为止,这些解决方案都没有对我产生任何影响。主要的区别似乎是,我的错误是相当随机的,并不总是发生在同一地点或相同的对象上。

我的堆栈追踪在下面..。一旦我到达“由”部分,我可以看到相同的行重复一遍又一遍,表明我的应用程序试图找到或做一些与JSF和失败有关的事情。我没有粘贴整个堆栈跟踪,因为它只会在1000+期间重复第286行到第143行,直到堆栈最终填满并抛出错误。

代码语言:javascript
复制
2017-07-05 10:06:00,133 [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] FATAL SecurityFilter        Msg=[EVENT FAILURE xxxxxxx -> /SecurityFilter] Error in ESAPI security filter: java.lang.StackOverflowError  UserId=xxxxxxx
javax.servlet.ServletException: java.lang.StackOverflowError
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:387)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:243)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:600)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:275)
    at myapp.pkg.AcctSummaryAction.perform(AcctSummaryAction.java:158)
    at myapp.pkg.DispatcherSec.processRequest(DispatcherSec.java:119)
    at myapp.pkg.DispatcherSec.doGet(DispatcherSec.java:130)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at myapp.navigation.JsfRequestFilter.doFilter(JsfRequestFilter.java:187)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at myapp.esapi.filters.SecurityFilter.doFilter(SecurityFilter.java:147)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at myapp.common.MdcFilter.doFilter(MdcFilter.java:68)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at myapp.navigation.DisplayProcessingFilter.doFilter(DisplayProcessingFilter.java:118)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at myapp.common.NoCacheFilter.doFilter(NoCacheFilter.java:68)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3431)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3397)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2280)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2196)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1621)
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:256)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
Caused by: java.lang.StackOverflowError
    at javax.faces.context.FacesContext.getCurrentInstance(FacesContext.java:832)
    at javax.faces.FactoryFinder$FactoryManagerCache.getApplicationFactoryManager(FactoryFinder.java:715)
    at javax.faces.FactoryFinder$FactoryManagerCache.access$100(FactoryFinder.java:690)
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:340)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:141)
    at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
    at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
    at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
    at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
    at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
    at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
    at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
    at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
    at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
    at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
    at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
    at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
    at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
    at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
    at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
    at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
    at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
    at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
    at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
    at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
    at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
    at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
    at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
    at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
    at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
    at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
    ...
    Etc............ (lines 286 to 107 repeat over and over)

我已经研究过一些对我没有帮助的例子:

编辑:我想我已经将问题追溯到文件中的一个设置:(参见下面)。一旦删除了这个设置,我就无法重现错误。看起来,这个应用程序在集群中的服务器之间序列化得不太好。内部WebLogic日志显示了我的应用程序中随机类的复制错误。希望它能帮到别人。如果在接下来的几天测试中我的错误没有再次出现,我将返回并标记为已解决。

代码语言:javascript
复制
<?xml version = '1.0' encoding = 'windows-1252'?>
    <weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd"
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <jsp-descriptor>
        <precompile>true</precompile>
    </jsp-descriptor>
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    <session-descriptor>
        <cookie-secure>true</cookie-secure>
        <cookie-http-only>true</cookie-http-only>        
        <!--<persistent-store-type>replicated_if_clustered</persistent-store-type>-->
        <url-rewriting-enabled>false</url-rewriting-enabled>
    </session-descriptor> 
</weblogic-web-app>

EDIT2:,似乎还有一个库冲突。我没有将我的JSTL库和标记库与项目一起发送,因为它应该在服务器上。当我将我的部署更改为包含这个.jar (glassfish.jstl. must _1.0.0.0_1-2-2-0.jar)时,它也使我的许多错误消失了,所以我的应用程序不一定总是找到我认为它正在找到的库。

EN

回答 1

Stack Overflow用户

发布于 2017-07-29 17:35:29

我通过做一些事情来解决这个问题,结果是weblogic设置和库冲突的结合。详细情况见原文的编辑:

  1. 从replicated_if_clustered中删除“weblogic.xml”设置。
  2. 打包.war文件到服务器的JSTL标记库(glassfish.jstl.JSTL_1.0.0.0_1-2-2-0.jar)。
  3. 检查了其余的部署设置,并确保我没有在项目中发送任何JSF、JSP运行时、ADF等库,以避免我和服务器之间的任何其他库冲突。
  4. 我还特别发现,默认情况下,"Resource变量Resolver“库是由JDeveloper部署的,它导致了一些奇怪的库冲突,因此我也从部署配置文件中删除了它。

我在日志文件中没有看到更多的错误,而且自从包含这些更改之后,它已经相当稳定了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44933197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档