[ 
https://issues.apache.org/jira/browse/MYFACES-3594?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Leonardo Uribe resolved MYFACES-3594.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.1.9
                   2.0.15
         Assignee: Leonardo Uribe
    
> ClassCastException after application restart due to UIViewParameter Renderer 
> Cacheing
> -------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3594
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3594
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.14
>         Environment: WebSphere Application Server Version 8.0.  
>            Reporter: Paul Nicolucci
>            Assignee: Leonardo Uribe
>             Fix For: 2.0.15, 2.1.9
>
>         Attachments: MYFACES-3594-2.patch, patch.txt
>
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> The following exception can occur after an application restart:
> javax.faces.FacesException: java.lang.ClassCastException: 
> org.apache.myfaces.extensions.validator.core.storage.DefaultRendererInterceptorPropertyStorage
>  incompatible with 
> org.apache.myfaces.extensions.validator.core.storage.RendererInterceptorPropertyStorage
>       at 
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
>       at 
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
>       at 
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191)
>       at 
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>       at 
> org.apache.myfaces.extensions.validator.core.startup.ExtValLifecycleWrapper.execute(ExtValLifecycleWrapper.java:61)
>       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
>       at 
> com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032)
>       at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3704)
>       at 
> com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
>       at 
> com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962)
>       at 
> com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
>       at 
> com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
>       at 
> com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
>       at 
> com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
>       at 
> com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
>       at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
>       at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
>       at 
> com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
>       at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1659)
> Caused by: java.lang.ClassCastException: 
> org.apache.myfaces.extensions.validator.core.storage.DefaultRendererInterceptorPropertyStorage
>  incompatible with 
> org.apache.myfaces.extensions.validator.core.storage.RendererInterceptorPropertyStorage
>       at 
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.getRendererInterceptorPropertyStorage(AbstractValidationInterceptor.java:477)
>       at 
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.setRendererInterceptorProperties(AbstractValidationInterceptor.java:456)
>       at 
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.beforeGetConvertedValue(AbstractValidationInterceptor.java:166)
>       at 
> org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererWrapper.getConvertedValue(ExtValRendererWrapper.java:361)
>       at 
> javax.faces.component.UIViewParameter.getConvertedValue(UIViewParameter.java:248)
>       at javax.faces.component.UIInput.validate(UIInput.java:556)
>       at javax.faces.component.UIInput.processValidators(UIInput.java:247)
>       at 
> javax.faces.component.UIViewParameter.processValidators(UIViewParameter.java:218)
>       at 
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1234)
>       at 
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1234)
>       at 
> javax.faces.component.UIViewRoot._processValidatorsDefault(UIViewRoot.java:1326)
>       at javax.faces.component.UIViewRoot.access$500(UIViewRoot.java:75)
>       at 
> javax.faces.component.UIViewRoot$ProcessValidatorPhaseProcessor.process(UIViewRoot.java:1401)
>       at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1282)
>       at 
> javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:758)
>       at 
> org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:34)
>       at 
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
>       ... 25 more
> The exception occurred because the UIViewParameter.java was holding on to 
> it's renderer because it's a static variable.  This cause a few problems:
> 1) Since WebSphere ships MyFaces in the runtime more than one application is 
> using this Static variable ( unlike when JSF is bundled within the 
> application ), so each application is using the same renderer.
> 2) The renderer was not being released during a restart of the application so 
> one from a different classloader was being used causing the ClassCastException
> 3) Since UIViewParameter is within the API we could not just add a method to 
> clean up the render, so I had to use the reflection API to make the call into 
> a private static method.
> I've attached a patch for this issue.  Please review and let me know your 
> thoughts.  I've tested this and have had a customer also verify that it 
> solves the issue they were seeing.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to