myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Marinschek <mmarinsc...@apache.org>
Subject Re: Extended Debug Tree - MYFACES-2676
Date Tue, 25 May 2010 05:43:02 GMT
Hi guys,

ok, in any case - let's not make the issue worse.

And - Leo - can you file a spec issue for this?

thx,

regards,

Martin

On 5/25/10, Leonardo Uribe <lu4242@gmail.com> wrote:
> Hi Martin
>
> I think the code that do a lot of calls to FacesContext.getCurrentInstance()
> right now is on all listeners attached to system events.
>
> One example is
> DefaultFaceletsStateManagementStrategy.PostAddPreRemoveFromViewListener. It
> is a listener attached to PostAddToViewEvent / PreRemoveFromViewEvent, but
> it requires to get the current FacesContext to do some operations. If we
> have one call here, that means this listener is being called once per each
> component in a tree.
>
> Doing some other different listeners I notice this is required over and
> over.
>
> It could be good to ask if it is possible modify the spec, so it could be
> possible to pass the current facesContext instance and prevent this lookup.
>
> regards,
>
> Leonardo Uribe
>
> 2010/5/24 Martin Marinschek <mmarinschek@apache.org>
>
>> Hi guys,
>>
>> well, yes - I fear so as well.
>>
>> I wonder if that development switch is used often in other places as
>> well - do we have that same performance problem somewhere else?
>>
>> best regards,
>>
>> Martin
>>
>> On Fri, May 21, 2010 at 6:17 PM, Jakob Korherr <jakob.korherr@gmail.com>
>> wrote:
>> > But this _could_ be a problem, or at least result in weird behavior, so
>> > I
>> > think it is the best solution just to remove the code from UIInput...
>> >
>> > Regards,
>> > Jakob
>> >
>> > 2010/5/21 Gerhard Petracek <gerhard.petracek@gmail.com>
>> >>
>> >> yes - that's true! i also told leonardo about it.
>> >> in his e-mail he just skipped it...
>> >> regards,
>> >> gerhard
>> >>
>> >> http://www.irian.at
>> >>
>> >> Your JSF powerhouse -
>> >> JSF Consulting, Development and
>> >> Courses in English and German
>> >>
>> >> Professional Support for Apache MyFaces
>> >>
>> >>
>> >>
>> >> 2010/5/21 Martin Marinschek <mmarinschek@apache.org>
>> >>>
>> >>> Hi guys,
>> >>>
>> >>> if MyFaces is deployed with the web-app, the static var will reside
in
>> >>> a class which is loaded by the context class-loader - so once per app.
>> >>> Problems might only arise if MyFaces is deployed only once for all
>> >>> web-apps - which will seldom be the case, I guess.
>> >>>
>> >>> best regards,
>> >>>
>> >>> Martin
>> >>>
>> >>> On 5/21/10, Jakob Korherr <jakob.korherr@gmail.com> wrote:
>> >>> > So the conclusion is to use a private static boolean on UIInput
that
>> >>> > tells
>> >>> > us if we are in Development stage or not.
>> >>> >
>> >>> > Any objections to that?
>> >>> >
>> >>> > Regards,
>> >>> > Jakob
>> >>> >
>> >>> > 2010/5/20 Leonardo Uribe <lu4242@gmail.com>
>> >>> >
>> >>> >> Hi
>> >>> >>
>> >>> >> 2010/5/19 Jan-Kees van Andel <jankeesvanandel@gmail.com>
>> >>> >>
>> >>> >> Sounds plausible, we already do the same thing with the
>> >>> >> ExternalContexts
>> >>> >>> class.
>> >>> >>>
>> >>> >>> It's blazing fast, but the question is: Are we allowed
to and do
>> >>> >>> we
>> >>> >>> want
>> >>> >>> to cache the instance?
>> >>> >>>
>> >>> >>>
>> >>> >> In theory yes, because it does not change the behavior expected
by
>> the
>> >>> >> spec.
>> >>> >>
>> >>> >>
>> >>> >>>  If the spec doesn't dictate otherwise, I'm in favor of
caching
>> >>> >>> it.
>> >>> >>>
>> >>> >>> Another idea is to cache it in the ServletContext. It's
not as
>> >>> >>> fast
>> >>> >>> as a
>> >>> >>> static final field, but still pretty fast and can be inspected
and
>> >>> >>> modified
>> >>> >>> through appserver tooling.
>> >>> >>>
>> >>> >>>
>> >>> >> The problem is from UIInput.setValue() or
>> UIInput.setSubmittedValue()
>> >>> >> we
>> >>> >> don't have access to ServletContext (the only way is through
>> >>> >> FacesContext.getCurrentInstance().getExternalContext(), and
we want
>> to
>> >>> >> avoid
>> >>> >> the call to FacesContext.getCurrentInstance() ).
>> >>> >>
>> >>> >> Talking with Gerhard, the conclusion was a static var could
do the
>> >>> >> job. Is
>> >>> >> just unrealistic assume someone has a production environment
with
>> some
>> >>> >> applications with project stage "production" and others
>> "development"
>> >>> >> (note
>> >>> >> shared variables are "shared" by all applications hosted in
a web
>> >>> >> server).
>> >>> >> In the worst case, the applications will continue working.
>> >>> >>
>> >>> >> regards,
>> >>> >>
>> >>> >> Leonardo
>> >>> >>
>> >>> >>
>> >>> >>> Regards,
>> >>> >>> Jan-Kees
>> >>> >>>
>> >>> >>>
>> >>> >>> 2010/5/19 Gerhard Petracek <gerhard.petracek@gmail.com>
>> >>> >>>
>> >>> >>>> we don't have to cache the faces-context.
>> >>> >>>> we can use e.g. an interface with a static final field.
>> >>> >>>>
>> >>> >>>> usage (example):
>> >>> >>>> if(Boolean.TRUE.equals(InternalProjectStage.IS_DEV_MODE))
>> >>> >>>> {
>> >>> >>>> //...
>> >>> >>>> }
>> >>> >>>>
>> >>> >>>> -> there is just one evaluation.
>> >>> >>>>
>> >>> >>>> regards,
>> >>> >>>> gerhard
>> >>> >>>>
>> >>> >>>> http://www.irian.at
>> >>> >>>>
>> >>> >>>> Your JSF powerhouse -
>> >>> >>>> JSF Consulting, Development and
>> >>> >>>> Courses in English and German
>> >>> >>>>
>> >>> >>>> Professional Support for Apache MyFaces
>> >>> >>>>
>> >>> >>>>
>> >>> >>>> 2010/5/19 Leonardo Uribe <lu4242@gmail.com>
>> >>> >>>>
>> >>> >>>> Hi
>> >>> >>>>>
>> >>> >>>>> The problem in this case is the only place we can
store this
>> >>> >>>>> information
>> >>> >>>>> is the component instance itself. So, at least
there is one
>> lookup
>> >>> >>>>> per
>> >>> >>>>> component.
>> >>> >>>>>
>> >>> >>>>> If we try to cache facesContext, unfortunately
there is not safe
>> >>> >>>>> way to
>> >>> >>>>> clean this reference (portlet case), so there is
a risk of use
>> old
>> >>> >>>>> instances
>> >>> >>>>> of this object in this case.
>> >>> >>>>>
>> >>> >>>>> regards,
>> >>> >>>>>
>> >>> >>>>> Leonardo Uribe
>> >>> >>>>>
>> >>> >>>>> 2010/5/19 Gerhard Petracek <gerhard.petracek@gmail.com>
>> >>> >>>>>
>> >>> >>>>> hi,
>> >>> >>>>>>
>> >>> >>>>>> as long as we don't want to change the project
stage
>> dynamically,
>> >>> >>>>>> we
>> >>> >>>>>> can just store e.g. a marker as static information.
>> >>> >>>>>>
>> >>> >>>>>> regards,
>> >>> >>>>>> gerhard
>> >>> >>>>>>
>> >>> >>>>>>
>> >>> >>>>>> http://www.irian.at
>> >>> >>>>>>
>> >>> >>>>>> Your JSF powerhouse -
>> >>> >>>>>> JSF Consulting, Development and
>> >>> >>>>>> Courses in English and German
>> >>> >>>>>>
>> >>> >>>>>> Professional Support for Apache MyFaces
>> >>> >>>>>>
>> >>> >>>>>>
>> >>> >>>>>>
>> >>> >>>>>> 2010/5/19 Jakob Korherr <jakob.korherr@gmail.com>
>> >>> >>>>>>
>> >>> >>>>>> Hi Martin,
>> >>> >>>>>>>
>> >>> >>>>>>> Indeed, we have to call FacesContext.getCurrentInstance()
>> >>> >>>>>>> everytime.
>> >>> >>>>>>>
>> >>> >>>>>>> So I guess it will be better to remove
the code from UIInput!
>> >>> >>>>>>>
>> >>> >>>>>>> Regards,
>> >>> >>>>>>> Jakob
>> >>> >>>>>>>
>> >>> >>>>>>> 2010/5/19 Martin Marinschek <mmarinschek@apache.org>
>> >>> >>>>>>>
>> >>> >>>>>>> Hi Jakob,
>> >>> >>>>>>>>
>> >>> >>>>>>>> > The problem with this is that
the code on UIInput checks
>> >>> >>>>>>>> > the
>> >>> >>>>>>>> ProjectStage
>> >>> >>>>>>>> > everytime setSubmittedValue()
or setValue() are called,
>> which
>> >>> >>>>>>>> > is
>> >>> >>>>>>>> very often
>> >>> >>>>>>>> > and could make MyFaces a bit slower,
I guess. If we remove
>> >>> >>>>>>>> > this
>> >>> >>>>>>>> code on
>> >>> >>>>>>>> > UIInput, the debug output will
stay mostly the same except
>> for
>> >>> >>>>>>>> > the
>> >>> >>>>>>>> call
>> >>> >>>>>>>> > stack, because this will be gone.
>> >>> >>>>>>>> >
>> >>> >>>>>>>> > The question now is if we should
leave it the way it
>> currently
>> >>> >>>>>>>> > is
>> >>> >>>>>>>> (with the
>> >>> >>>>>>>> > code on UIInput and the possibility
to display the call
>> stack)
>> >>> >>>>>>>> > or
>> >>> >>>>>>>> if we
>> >>> >>>>>>>> > should remove the code from UIInput
(which means no
>> >>> >>>>>>>> > slowdown
>> >>> >>>>>>>> > on
>> >>> >>>>>>>> > setSubmittedValue() and setValue()
but loosing the call
>> >>> >>>>>>>> > stack).
>> >>> >>>>>>>> What do you
>> >>> >>>>>>>> > guys think? Any opinions/objections?
>> >>> >>>>>>>>
>> >>> >>>>>>>> for me it is a question how fast this
getProjectStage()
>> >>> >>>>>>>> derivation
>> >>> >>>>>>>> is.
>> >>> >>>>>>>> If that means to call FacesContext.getCurrentInstance()
all
>> the
>> >>> >>>>>>>> time,
>> >>> >>>>>>>> the impact is considerable (thread-local
resolution). In this
>> >>> >>>>>>>> case
>> >>> >>>>>>>> it
>> >>> >>>>>>>> might be better to not have this information...
>> >>> >>>>>>>>
>> >>> >>>>>>>> Martin
>> >>> >>>>>>>>
>> >>> >>>>>>>> > Regards,
>> >>> >>>>>>>> > Jakob
>> >>> >>>>>>>> >
>> >>> >>>>>>>> > --
>> >>> >>>>>>>> > Jakob Korherr
>> >>> >>>>>>>> >
>> >>> >>>>>>>> > blog: http://www.jakobk.com
>> >>> >>>>>>>> > twitter: http://twitter.com/jakobkorherr
>> >>> >>>>>>>> > work: http://www.irian.at
>> >>> >>>>>>>> >
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>> --
>> >>> >>>>>>>>
>> >>> >>>>>>>> http://www.irian.at
>> >>> >>>>>>>>
>> >>> >>>>>>>> Your JSF powerhouse -
>> >>> >>>>>>>> JSF Consulting, Development and
>> >>> >>>>>>>> Courses in English and German
>> >>> >>>>>>>>
>> >>> >>>>>>>> Professional Support for Apache MyFaces
>> >>> >>>>>>>>
>> >>> >>>>>>>
>> >>> >>>>>>>
>> >>> >>>>>>>
>> >>> >>>>>>> --
>> >>> >>>>>>> Jakob Korherr
>> >>> >>>>>>>
>> >>> >>>>>>> blog: http://www.jakobk.com
>> >>> >>>>>>> twitter: http://twitter.com/jakobkorherr
>> >>> >>>>>>> work: http://www.irian.at
>> >>> >>>>>>>
>> >>> >>>>>>
>> >>> >>>>>>
>> >>> >>>>>
>> >>> >>>>
>> >>> >>>
>> >>> >>
>> >>> >
>> >>> >
>> >>> > --
>> >>> > Jakob Korherr
>> >>> >
>> >>> > blog: http://www.jakobk.com
>> >>> > twitter: http://twitter.com/jakobkorherr
>> >>> > work: http://www.irian.at
>> >>> >
>> >>>
>> >>>
>> >>> --
>> >>>
>> >>> http://www.irian.at
>> >>>
>> >>> Your JSF powerhouse -
>> >>> JSF Consulting, Development and
>> >>> Courses in English and German
>> >>>
>> >>> Professional Support for Apache MyFaces
>> >>
>> >
>> >
>> >
>> > --
>> > Jakob Korherr
>> >
>> > blog: http://www.jakobk.com
>> > twitter: http://twitter.com/jakobkorherr
>> > work: http://www.irian.at
>> >
>>
>>
>>
>> --
>>
>> http://www.irian.at
>>
>> Your JSF powerhouse -
>> JSF Consulting, Development and
>> Courses in English and German
>>
>> Professional Support for Apache MyFaces
>>
>


-- 

http://www.irian.at

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

Professional Support for Apache MyFaces

Mime
View raw message