On Sun, 2006-02-19 at 11:36 +0100, Martin Marinschek wrote: > ok - so that means we'll need to drop static?
Yes. In fact, because MyFaces libs are often placed in a "shared" classpath, static should be avoided in almost all cases I expect. > > won't that cause performance problems? Calling LogFactory.getLog is *reasonably* efficient. The impact is trivial for long-lived objects like ApplicationFactoryImpl. I wouldn't worry about performance for things like UIComponent objects either, which have a lifetime of a request. If there are very short-lived objects which are frequently created, then it might be worth considering either: (a) only fetching a Log object if logging is actually needed, ie if (some condition) { Log log = LogFactory.getLog(Foo.class); log.warn(....); } (b) using the Log object stored on some other component. longLivedObject.getXYZLog().debug(....) Of course this works only when there is some suitable longer-lived object that is easily accessable from the short-lived object that wants to do logging. Cheers, Simon > > regards, > > Martin > > On 2/19/06, Simon Kitching <[EMAIL PROTECTED]> wrote: > > On Sun, 2006-02-19 at 00:46 +0000, [EMAIL PROTECTED] wrote: > > > Author: mmarinschek > > > Date: Sat Feb 18 16:46:18 2006 > > > New Revision: 378805 > > > > > > URL: http://svn.apache.org/viewcvs?rev=378805&view=rev > > > Log: > > > minor changes in application-factory, fixed "readOnly" referral in > > > HtmlRendererUtils > > > > > > Modified: > > > > > > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java > > > > > > Modified: > > > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java > > > URL: > > > http://svn.apache.org/viewcvs/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java?rev=378805&r1=378804&r2=378805&view=diff > > > ============================================================================== > > > --- > > > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java > > > (original) > > > +++ > > > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java > > > Sat Feb 18 16:46:18 2006 > > > @@ -29,12 +29,14 @@ > > > public class ApplicationFactoryImpl > > > extends ApplicationFactory > > > { > > > - private static final Log log = > > > LogFactory.getLog(ApplicationFactory.class); > > > + private static final Log log = > > > LogFactory.getLog(ApplicationFactoryImpl.class); > > > > > > Just a warning to all developers: when using commons-logging in a > > library, STATIC fields must **NOT** be used to store Log objects. > > > > The problem is that the class may be called with various thread-context > > classloaders (TCCL) set. However the class is only ever loaded once. > > > > If the Log object is static, then it is initialised using the TCCL of > > the very first webapp to use it (ie which forces the class to be loaded) > > - including picking up config info from that TCCL. All other webapps > > will then use the same Log object - which is not healthy. > > > > Yes this is a nuisance, but it's absolutely necessary to avoid storing > > Log instances in static fields for libraries like MyFaces. > > > > Regards, > > > > Simon > > > > > > > -- > > http://www.irian.at > > Your JSF powerhouse - > JSF Consulting, Development and > Courses in English and German > > Professional Support for Apache MyFaces