On Tue, 2005-02-08 at 11:30, Ceki Gülcü wrote: > Richard et al., > > Before discussing relatively complex cases you mention, I think it > would benefit everyone to realize that even in the most basic cases > JCL will not work as expected. > > In your examples you refer to commons-logging-api.jar but > commons-logging-api.jar and commons-logging.jar are not > equivalent. The former does *not* include the classes > org.apache.commons.logging.impl.Log4JLogger nor > org.apache.commons.logging.impl.AvalonLogger. Thus, > commons-logging-api.jar cannot bridge to log4j, for the simple reason > that the bridge, Log4JLogger, is not there. > > Consider the following simple set up > > Parent [commons-logging.jar] > ^ > | > Child [log4j.jar] > > Depending on how the thread context class loader is set,and the > delegation model followed by the child loader, the above configuration, in > the best case, will ignore log4j and in many other cases > will throw a LogConfigurationException. > > The following set up will not fair much better (regardless of the > delegation model): > > Parent [commons-logging.jar] > ^ > | > Child [commons-logging.jar, log4j.jar] > > > The only setup that will not blow in your face is the following: > > Parent [commons-logging-api.jar] > ^ > | > Child [commons-logging.jar, log4j.jar] > > Note this is the set up used by Tomcat. Also note that it precludes > the use of log4j by Tomcat itself as commons-logging-api.jar includes > support for java.util.logging but not log4j. If you replace > commons-logging-api.jar with commons-logging.jar, then you must place > log4j.jar next to it unless you enjoy JCL throwing > LogConfigurationExceptions at you. > > The bottom lines is that when compared with any statically bound > bridging mechanism found in UGLI, JCL's dynamic discovery brings no > added value but has a significant cost in aggravation. > > Richard, is there a point discussing complex cases when even the > simplest ones don't work? Were you aware of problems in the above > cases?
(i'm not sure whether i'm missing your point.) it seems to me that it matters not whether the discovery is dynamic or static: the log4j library needs to be available in the classloader. static discovery would break in a similar fashion if a required library is not present. from a practical perspective, i don't really see having to put a number of libraries together so that they are loaded by the same classloader is really a restriction. what matters is that there are ways to achieve the required results and definite instructions are available which are easy for deployers to understand. - robert --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]