# Apache MyFaces Core Concepts - ELResolver ordering
As with MyFaces core 2.0.2 (or 1.2.10) it is possible to change the predefined order or ELResolvers.
Standard order defined in the JSF 2.0 spec
* faces.ImplicitObjectELResolverForFaces
* faces.CompositeComponentAttributesELResolver
* el.CompositeELResolver (ELResolvers from faces-config and Application.addELResolver())
* faces.ManagedBeanELResolver
* faces.ResourceELResolver
* el.ResourceBundleELResolver
* faces.ResourceBundleELResolver
* el.MapELResolver
* el.ListELResolver
* el.ArrayELResolver
* el.BeanELResolver
* faces.ScopedAttributeELResolver

This order works great in every case, but is not always the fastest one, e.g. if you are using CDI,
because the CDI-ELResolver will be called many times for the most trivial ELExpressions, because he is installed via the faces-config and thus comes pretty early.

#### Changing the order
To change this predefined order you can provide a java.util.Comparator<ELResolver> implementation which will be applied to the List of ELResolvers mentioned above.
To install the comparator you simply have to set a web.xml config parameter:
```xml
<context-param>
    <param-name>org.apache.myfaces.EL_RESOLVER_COMPARATOR</param-name>
    <param-value>com.acme.el.MyELResolverComparator</param-value>
</context-param>
```

### Default implementations shipping with MyFaces core

MyFaces core already provides three implementations of java.util.Comparator<ELResolver>.
* `org.apache.myfaces.el.unified.CdiELResolverComparator`: optimized for CDI (OpenWebBeans and Weld)
* REMOVED in 4.0.1: `org.apache.myfaces.el.unified.OpenWebBeansELResolverComparator`: optimized for Apache OpenWebBeans
* `org.apache.myfaces.el.unified.CustomFirstELResolverComparator`: puts your custom ELResolvers to the first place
* `org.apache.myfaces.el.unified.CustomLastELResolverComparator`: puts your custom ELResolvers to the last place

To optimize the marriage of MyFaces and OpenWebBeans, you simply have to set the following config parameter:
```xml
<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 moves the WebBeansELResolver almost to the last place in the ELResolver chain, thus improving the overall performance of ELExpression evaluations.

#### 4.0.x
In 4.0.1 we replaced `org.apache.myfaces.el.unified.OpenWebBeansELResolverComparator` by `org.apache.myfaces.el.unified.CdiELResolverComparator`, which also works for Weld now.

