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

Leonardo Uribe resolved MYFACES-2873.
-------------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 2.0.2)
                   2.1.2
                   2.0.8
                   1.2.11

I reviewed the stack trace and the problem is an EL expressions is created from 
a location where no ExternalContext is setup (TrinidadFilter). 

The comparator or predicate used to sort/filter EL resolvers should be created 
by FacesConfigurator and attached to RuntimeConfig object, so it just can be 
used from Application implementation instance later without retrieve 
ExternalContext instance. I thought it was something related to the algorithm 
but at the end it was a side effect. Thanks for the report.

> Provide a way to change the order of ELResolvers
> ------------------------------------------------
>
>                 Key: MYFACES-2873
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2873
>             Project: MyFaces Core
>          Issue Type: Improvement
>    Affects Versions: 1.2.9, 2.0.1
>            Reporter: Jakob Korherr
>            Assignee: Leonardo Uribe
>             Fix For: 1.2.11, 2.0.8, 2.1.2
>
>         Attachments: MYFACES-2873.patch
>
>
> When using CDI or Spring or any other framework/lib that provides a custom 
> ELResolver there can be performance problems, because the custom ELResolvers 
> from the faces-config are plugged in pretty early in the resolver chain.
> For CDI this means that for lots of trivial ELExpressions (like Array or Map 
> value lookups) the CDI-ELResolver gets called and this resolver is not very 
> performant, because it has to go through all Objects which are handled by CDI 
> to find the fitting one. And in the most cases it won't find a fitting 
> object, because the requested value is not handled by CDI.
> JSF currently only allows to sort the ELResolvers from different faces-config 
> files, but not to change the order of predefined ELResolvers (like e.g. 
> MapELResolver). Thus talking with Mark Struberg and Gerhard Petracek we came 
> up with a Comparator<ELResolver> solution for this problem.
> The user can define a Comparator<ELResolver> via a web.xml config param and 
> this comparator will be used to sort the ELResolvers before they are applied 
> (but of course, only once). In addition we provide 3 default implementations: 
> one to put every ELResolver from the faces-config to the front, one to put 
> them to the back and one optimized for OpenWebBeans.
> This solution gives you many improvements:
>  - you can tune your application by a customized order of ELResolvers
>  - you don't need MyFaces implementation classes, but only a simple Comparator
>  - if you switch to Mojarra or a earlier version of MyFaces, the ordering 
> just won't work, but the behavior of the ELResolvers is the same
> The context-parameter will look like this (for the OWB-optimized resolver):
> <context-param>
>         <param-name>org.apache.myfaces.EL_RESOLVER_COMPARATOR</param-name>
>         
> <param-value>org.apache.myfaces.el.unified.OpenWebBeansELResolverComparator</param-value>
> </context-param>

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to