On 1/21/07, Adrian Gonzalez <[EMAIL PROTECTED]> wrote:


Hello,

I think there's a little bug on shale view 1.0.4.

Shale View : Bug on render response phase when removing view from request
map.

Error in org.apache.shale.view.faces.ViewPhaseListener, method
afterRenderResponse, lien 233 :
iterator obtained from map, code calling map.remove, and afterward using
iterator which generated ConcurrentModificationException.

Just change this order :
- remove FacesConstants.VIEWS_INITIALIZED from map.
- obtain iterator.
- use iterator.

I've just changed this piece of code in order to have :
    private void afterRenderResponse(PhaseEvent event) {
        /*AFTER CHANGE*/
        // Initialize local values we will need
        Map map = event.getFacesContext
().getExternalContext().getRequestMap();
        List list = new ArrayList();

        // Remove our list of initialized views explicitly
        map.remove(FacesConstants.VIEWS_INITIALIZED);

        Iterator entries = map.entrySet().iterator();

instead of :
        /*BEFORE CHANGE
        // Initialize local values we will need
        Map map = event.getFacesContext
().getExternalContext().getRequestMap();
        List list = new ArrayList();
        Iterator entries = map.entrySet().iterator();

        // Remove our list of initialized views explicitly
        map.remove(FacesConstants.VIEWS_INITIALIZED);

And it's ok (or it seems).


Adrian,

Thanks very much for the thorough analysis ... it looks like you are on
target (although it likely depends on your VM's implementation of the
iterator methods so the problem may or may not manifest itself everywhere).

Could you do me a favor and file a bug in our issue tracking system[1] for
this?  That way, the eventual fix will automatically be included in the
release notes for the next version.

Craig

[1] https://issues.apache.org/struts/browse/SHALE



Here's the stack trace I had :
[21/01/07 20:38:36:453 CET] 00000043 helper        I   BEFORE
RENDER_RESPONSE(6)
[21/01/07 20:38:38:765 CET] 00000043 HtmlTableRend E
org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBaseencodeInnerHtml
 Row is not available. Rowindex = 3
[21/01/07 20:38:38:921 CET] 00000043 HtmlResponseW W
org.apache.myfaces.shared_impl.renderkit.html.HtmlResponseWriterImplendElement 
HTML nesting warning on closing tbody: element tr rendered by
component : {Component-Path : [Class:
org.ajax4jsf.framework.ajax.AjaxViewRootRIOneOne,ViewId:
/userList.jsp][Class: javax.faces.component.html.HtmlForm,Id:
editUser][Class: org.apache.myfaces.component.html.ext.HtmlDataTable,Id:
userList]} not explicitly closed
[21/01/07 20:38:40:250 CET] 00000043 PhaseListener E
org.apache.myfaces.lifecycle.PhaseListenerManagerinformPhaseListenersAfter 
Exception in PhaseListener RENDER_RESPONSE(6)
afterPhase
                                 java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:942)
    at java.util.HashMap$KeyIterator.next(HashMap.java:978)
    at com.ibm.ws.webcontainer.srt.SRTServletRequest$1.nextElement(
SRTServletRequest.java:177)
    at
org.apache.myfaces.context.servlet.AbstractAttributeMap$KeyIterator.next(
AbstractAttributeMap.java:210)
    at
org.apache.myfaces.context.servlet.AbstractAttributeMap$EntryIterator.next
(AbstractAttributeMap.java:306)
    at org.apache.shale.view.faces.ViewPhaseListener.afterRenderResponse(
ViewPhaseListener.java:233)
    at org.apache.shale.view.faces.ViewPhaseListener.afterPhase(
ViewPhaseListener.java:106)
    at
org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter
(PhaseListenerManager.java:89)
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(
LifecycleImpl.java:391)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
    at org.apache.myfaces.webapp.MyFacesServlet.service(
MyFacesServlet.java:74)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(
ServletWrapper.java:1282)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(
ServletWrapper.java:1239)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:136)
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(
ExtensionsFilter.java:144)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(
BaseXMLFilter.java:67)
    at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(
BaseFilter.java:223)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at org.firsttest.webapp.filter.MessageFilter.doFilter(
MessageFilter.java:45)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(
UrlRewriteFilter.java:375)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(
GzipFilter.java:75)
    at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java
:89)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at org.displaytag.filter.ResponseOverrideFilter.doFilter(
ResponseOverrideFilter.java:125)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at org.firsttest.webapp.filter.LocaleFilter.doFilterInternal(
LocaleFilter.java:55)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(
OncePerRequestFilter.java:77)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at com.opensymphony.clickstream.ClickstreamFilter.doFilter(
ClickstreamFilter.java:42)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal
(OpenSessionInViewFilter.java:174)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(
OncePerRequestFilter.java:77)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:264)
    at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(
FilterSecurityInterceptor.java:107)
    at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(
FilterSecurityInterceptor.java:72)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(
ExceptionTranslationFilter.java:110)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(
AnonymousProcessingFilter.java:125)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter
(RememberMeProcessingFilter.java:142)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at
org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter
(SecurityContextHolderAwareRequestFilter.java:81)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(
AbstractProcessingFilter.java:217)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java
:108)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(
HttpSessionContextIntegrationFilter.java:193)
    at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter
(FilterChainProxy.java:274)
    at org.acegisecurity.util.FilterChainProxy.doFilter(
FilterChainProxy.java:148)
    at org.acegisecurity.util.FilterToBeanProxy.doFilter(
FilterToBeanProxy.java:98)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(
WebAppFilterChain.java:121)
    at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(
CharacterEncodingFilter.java:78)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(
OncePerRequestFilter.java:77)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(
FilterInstanceWrapper.java:142)









___________________________________________________________________________
Découvrez une nouvelle façon d'obtenir des réponses à toutes vos questions
!
Profitez des connaissances, des opinions et des expériences des
internautes sur Yahoo! Questions/Réponses
http://fr.answers.yahoo.com

Reply via email to