hi martin,

i think most users will be fine with the OpenWebBeansELResolverComparator
[1] and a custom InterceptorHandler (btw. an add-on like the scope-boost for
codi).
(esp. because an implicit variable would also break e.g. ide support.)

however, if you have concrete numbers, we could start a vote about it.

regards,
gerhard

[1] https://cwiki.apache.org/confluence/display/MYFACES/ELResolver+ordering

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces



2011/8/8 Martin Koci <martin.kocicak.k...@gmail.com>

> Hi,
>
>
> the OWB el-resolver itself is fast enough, thats not the problem. The
> problem is when you use CDI managed bean in big ELResolver chain. For
> example, consider this chain:
>
> ImplicitObjectResolver
> MapELResolver
> ResourceResolver
> CompositeComponentELResolver
> VariableResolverToELResolver
> PropertyResolverToELResolver
> FlashELResolver
> ManagedBeanResolver
> ResourceBundleELResolver
> ResourceBundleResolver
> ListELResolver
> ArrayListResolver
> org.apache.webbeans.el.WebBeansELResolver
> SkinPropertiesELResolver
> ResourceParametrELResolver
> javax.el.BeanELResolver
>
> then when resolving #{cdiScopeBean} EL impl must call first 12 resolvers
> and none of them sets elContext.setPropertyResolved(true)
>
> Old JSF style can shorten it with #{sessionScope.sessionScopedBean} for
> example and then resolving takes only first two resolvers because
> MapELResolver sets propertyResolved(true)
>
> so I'm looking for a solution how to minimize "void" usage of
> ELresolvers and how to say directly that "this is CDI bean and use CDI
> ELResolver for it"
>
>
> Gerhard Petracek píše v Po 08. 08. 2011 v 15:50 +0200:
> > hi martin,
> >
> >
> > the real overhead (after our recent improvements) is the overhead of
> > the proxy itself.
> >
> >
> > in owb we have a cache in the el-resolver as well as in
> > some implementations of InterceptorHandler. the upcoming version of
> > owb will allow to use such special caches also for custom scopes.
> > e.g. there is a scope-boost add-on [1] for codi. so you get contextual
> > instances which are cached in a thread-local and the add-on also has
> > to do the reset of the cache (as soon as it is needed - that depends
> > on the concrete scope).
> >
> >
> > since we already have two caches in place and the real overhead is in
> > the proxy implementation, i'm not sure if we really get more
> > performance with such a spi.
> >
> >
> > (mark also implemented a cache for methods which aren't intercepted. i
> > already tested it and depending on the constellation the increase in
> > performance is about 5%.)
> >
> >
> > regards,
> > gerhard
> >
> >
> > [1]
> http://os890.blogspot.com/2011/08/benchmark-boost-myfaces-codi-scopes.html
> >
> > http://www.irian.at
> >
> > Your JSF powerhouse -
> > JSF Consulting, Development and
> > Courses in English and German
> >
> > Professional Support for Apache MyFaces
> >
> >
> >
> >
> > 2011/8/8 Martin Koci <martin.kocicak.k...@gmail.com>
> >         Hi,
> >
> >         if user uses plain old JSF style with managed beans like:
> >
> >         #{sessionScope.mySessionScopedBean} or
> >         #{requestScope.myRequestScopedBean} or
> >         #{requestScope.varFromDataTable.property}
> >
> >         it can achieve excellent performance during render response
> >         phase,
> >         because every EL resolution takes only two steps:
> >
> >         1) o.a.m.ImplicitObjectResolver resolves sessionScope or
> >         requestScope to
> >         java.util.Map
> >         2) javax.el.MapELResolver reads map.get("mySessionScopedBean")
> >         and sets
> >         elContext.setPropertyResolved
> >
> >         (at first access ManagedBeanResolver must create bean instance
> >         but we
> >         can ignore it for simplicity).
> >
> >         Specially if user uses EL resolvers ordering [1]  and creates
> >         chain of
> >         (ImlicitObjectResolver,MapELResolver, other resolvers) then
> >         resolving
> >         takes only two first resolvers.
> >
> >
> >         Now compare it with situation where CDI is used. Because
> >         CDI/OWB
> >         resolver is not so fast as default el resolvers, common usage
> >         is put it
> >         at bottom of resolvers chain with
> >         OpenWebBeansELResolverComparator. Then
> >         resolving must go thru all ELresolvers in chain (12 or more
> >         resolvers)
> >         to find a @Named bean.
> >
> >
> >         How to improve this? One thing can be use custom implicit
> >         object for
> >         this
> >         1) create ImplicitObjectsProvider SPI interface in myfaces
> >         2) CDI and CDI extension will add own implementation of
> >         myfaces
> >         ImlicitObject, for example #{codiWindowScope} from CODI
> >         3) the resolved value from implicit object can mimic the map
> >         interfaces
> >         (for example WindowScopeMap) to preserve behaviour of servlet
> >         scopes and
> >         to use MapELResolver
> >
> >         WDYT? Any other ideas?
> >
> >
> >         Regards,
> >
> >         Kočičák
> >
> >         [1] https://cwiki.apache.org/MYFACES/elresolver-ordering.html
> >
> >
> >
>
>
>

Reply via email to