繁体   English   中英

WebLogic 12c上的JSF 2中的Stackoverflow错误

[英]Stackoverflow error in JSF 2 on WebLogic 12c

我正在开发一个由遗留的JSP Servlet代码和较新的JSF代码组成的应用程序。 我遇到无法解决的StackOverlow错误。 有没有人看过或经历过类似的事情,并且可以帮助我指出这种混合JSP / JSF应用程序的正确方向?

我很确定JSF框架正在尝试在非JSF页面上做某事,并且陷入了JSF框架内的递归循环中。 我在群集WebLogic 12.1.3环境上使用JSF 2.1.20。 我没有在EAR或WAR文件中捆绑任何JSF库,而是使用一切的服务器版本。

我已经做了相当多的搜索,发现了其他类似的问题,但是到目前为止,没有一种解决方案对我有所帮助。 主要区别似乎是我的错误是非常随机的,不会一直发生,不在同一位置或同一对象上发生。

我的堆栈跟踪在下面...进入“ Caused by”部分后,我可以看到相同的行一遍又一遍地重复,这表明我的应用程序正在尝试使用JSF查找或执行某项操作而失败。 我之所以没有粘贴整个堆栈跟踪记录,是因为它只会使286至143行重复执行1000多次,直到堆栈最终填满并抛出错误为止。

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.xml文件中的一个设置:“ persistent-store-type = replicated_if_clustered”(请参见下文)。 删除此设置后,我将无法重现该错误。 看来此应用程序在群集中的服务器之间的序列化不是很好。 内部WebLogic日志显示了我的应用程序中随机类的复制错误。 希望它对其他人有帮助。 如果在接下来的几天的测试中我的错误没有再出现,我会回来并将其标记为已解决。

<?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_1.0.0.0_1-2-2-0.jar)时,它也使很多错误消失了,因此我的应用程序一定不能一直在寻找我所需要的库以为找到了。

我通过做一些事情解决了这个问题,最终导致了weblogic设置和库冲突的结合。 详细信息在原始帖子的编辑中:

  1. 从weblogic.xml中删除了“ replicated_if_clustered”设置。
  2. 打包JSTL标记库(glassfish.jstl_1.0.0.0_1-2-2-0.jar),并将.war文件打包到服务器。
  3. 检查了其余的部署设置,并确保没有随项目一起发送任何JSF,JSP运行时,ADF等库,以避免我和服务器之间发生任何其他库冲突。
  4. 我还特别发现JDeveloper默认部署了“资源束变量解析器”库,它引起了一些奇怪的库冲突,因此我也将其从部署配置文件中删除了。

我没有在日志文件中看到任何其他错误,并且由于包含了这些更改,因此它非常稳定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM