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 <[email protected]> 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 <[email protected]> > >> 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 <[email protected]> >> 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 <[email protected]> >> >> >> >> 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 <[email protected]> >> >>> >> >>> 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 <[email protected]> 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 <[email protected]> >> >>> > >> >>> >> Hi >> >>> >> >> >>> >> 2010/5/19 Jan-Kees van Andel <[email protected]> >> >>> >> >> >>> >> 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 <[email protected]> >> >>> >>> >> >>> >>>> 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 <[email protected]> >> >>> >>>> >> >>> >>>> 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 <[email protected]> >> >>> >>>>> >> >>> >>>>> 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 <[email protected]> >> >>> >>>>>> >> >>> >>>>>> 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 <[email protected]> >> >>> >>>>>>> >> >>> >>>>>>> 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
