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.korh...@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 <lu4...@gmail.com> > >> Hi >> >> 2010/5/19 Jan-Kees van Andel <jankeesvanan...@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.petra...@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 <lu4...@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.petra...@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.korh...@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 <mmarinsc...@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