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