Hi Gerhard!
I thought about this, but since we are only caching Contextual References (our
proxies!), this should not make any problems.
Because even if the Contextual Instance behind changes (e.g. a @ViewScoped bean
points to another instance after the forward), the proxy will simply pickup the
new instance.
I also thought about returning the Contextual Instance directly, but there are
2
arguments against this
a) the one you mentioned in your mail. We would need to detect any 'instance
changes' on a page. or cleanup the ELContextStore after a page/tree got
rendered.
b) if you use this bean in a EL method call e.g. #{a.setUser(user)} and a
stores
the User internally, this might be problematic
I'm thinking about introducing a mechanism to better support request scoped (or
'bigger' scoped) beans via a RequestScopedBeanProxyHandler (like we already do
for @ApplicationScoped beans). + a property which allows adding of own 3rd
party
scopes.
But I need to profile this first, to see if it's really worth it.
LieGrue,
strub
----- Original Message ----
> From: Gerhard Petracek <[email protected]>
> To: [email protected]
> Sent: Fri, July 23, 2010 1:10:22 PM
> Subject: Re: ELContextStore Question
>
> hi mark,
>
> if you cache normal scope beans as well, please just cache the standard
> scopes.
> in special cases a cache for all normal scoped beans would cause
> side-effects.
>
> e.g. in case of an immediate destruction or reset of conversations provided
> by myfaces codi.
> the same might be true if you end the session manually.
>
> regards,
> gerhard
>
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>
>
> 2010/7/23 Gerhard Petracek <[email protected]>
>
> > hi mark,
> >
> > yes - i agree with you!
> >
> > ok - sounds great!
> > i also planned to optimize it today.
> > so i'll just have a look at your improvements.
> >
> > regards,
> > gerhard
> >
> > http://www.irian.at
> >
> > Your JSF powerhouse -
> > JSF Consulting, Development and
> > Courses in English and German
> >
> > Professional Support for Apache MyFaces
> >
> >
> > 2010/7/23 Mark Struberg <[email protected]>
> >
> >> Yes, what did confuse me first was the fact that half of the
> >> bean.getScope().equals(Dependent.class) was coded in the ELResolver (the
> >> 'get'
> >> part), and half of it in ELContextStore (the 'put' part).
> >>
> >>
> >> So the logic per se was just fine. I cleaned it up a bit, added
> >> documentation
> >> and also added a cache for name resolvements. This speeds up a typical
JSF
> >> application with lots of EL about 30% :)
> >>
> >> I hope it's a bit easier to read now. Please let me know if I forgot /
> >> misinterpreted something.
> >>
> >> LieGrue,
> >> strub
> >>
> >>
> >>
> >> ----- Original Message ----
> >> > From: Gerhard Petracek <[email protected]>
> >> > To: [email protected]
> >> > Sent: Fri, July 23, 2010 10:43:48 AM
> >> > Subject: Re: ELContextStore Question
> >> >
> >> > hi mark,
> >> >
> >> > as i see - the ELContextStore is just for dependent beans.
> >> > @NormalScoped beans aren't affected (see ELContextStore#addDependent).
> >> >
> >> > regards,
> >> > gerhard
> >> >
> >> > http://www.irian.at
> >> >
> >> > Your JSF powerhouse -
> >> > JSF Consulting, Development and
> >> > Courses in English and German
> >> >
> >> > Professional Support for Apache MyFaces
> >> >
> >> >
> >> >
> >> > 2010/7/23 Mark Struberg <[email protected]>
> >> >
> >> > > Hi!
> >> > >
> >> > > I don't really understand the ELContextStore which is used in the
> >> > > WebBeansELResolver.
> >> > >
> >> > > It seems to cache all beans which are invoked via EL. So far so good
> >> (but
> >> > > the
> >> > > algorithm needs improvement).
> >> > > But what I absolutely not understand is why it releases all those
> >> beans at
> >> > > the
> >> > > end of each request. This leads to invoking @PreDestroy to those
> >> beans
> >> > > after
> >> > > every EL encapsulation
> >> > >
> >> > >
> >> > > My first bet is that this was an attempt to resolve 6.4.3. Dependent
> >> > > pseudo-scope and Unified EL, isn't?
> >> > >
> >> > > This defines that in a complex EL statement, multiple references to
> >> the
> >> > > same
> >> > > @Dependent scoped bean must always get the same Contextual instance
> >> of this
> >> > > very
> >> > > bean. And for those @Dependent scoped beans it is also ok to destroy
> >> them,
> >> > > because they don't 'hang' on some NormalScoped bean.
> >> > >
> >> > > But we must not treat @NormalScoped beans this very way!
> >> > >
> >> > > wdyt?
> >> > >
> >> > > LieGrue,
> >> > > strub
> >> > >
> >> > >
> >> > >
> >> > >
> >> > >
> >> >
> >>
> >>
> >>
> >>
> >
>