Equinox is doing some magic by default which is effectively setting the context classloader to load classes from the current bundle. This may or may not be what you want (in this specific case it is) -- hence, we don't do that in felix and you have to do that yourself. In any case, the spec is mum on the issue.
regards, Karl On Tue, Nov 27, 2012 at 11:33 AM, Bengt Rodehav <[email protected]> wrote: > Thanks for the explanation. One question though: > > The problem I had (log4j classes were present in jar:s in the Windows > CLASSPATH which caused them to found by the application classloader) > disappeared when using Equinox instead of Felix. What is Felix doing > different than Equinox? Is Equinox by default setting the CCL to null? > > /Bengt > > > 2012/11/27 Karl Pauls <[email protected]> > > > The problem is the context classloader. You have to make sure you set the > > context classloader to null when starting felix and when calling into > felix > > from the outside. > > > > The thing is, threads inherit the current context class loader. > > Furthermore, the context classloader gets set by the servlet container > when > > the bridge servlet is called. > > > > The problem is that log4j is stupid and assumes that it should use the > > context classloader first to try to find classes. That isn't going to > work > > when log4j is comming from a bundle -- hence, you have two options: > > > > 1. Set the context classloader to null while creating the framework > > instance and starting it _and_ set it to null when calling into the > > framework from the outside (_make sure_ to _set it back_ when you > return). > > > > 2. Don't provide log4j from a bundle but make it available via the system > > bundle (i.e., use a version that you have outside and delegate it down). > > > > regards, > > > > Karl > > > > > > On Tue, Nov 27, 2012 at 8:26 AM, Bengt Rodehav <[email protected]> > wrote: > > > > > Hello Charles, > > > > > > I recently had a similar problem that I brought up on the Karaf user > > list: > > > > > > > > > > > > http://mail-archives.apache.org/mod_mbox/karaf-user/201211.mbox/%3CCAJ0TPG%2BERzf6Q709cndh-YqfP_HQq%3DVk6iA4ZQfEtZE7tJPWUw%40mail.gmail.com%3E > > > > > > Although my problem was that the application classloader had already > > loaded > > > some log4j classes due to the CLASSPATH environment variable on > Windows, > > I > > > noted that everything worked fine using Equinox instead of Felix. > > > > > > Apparently Equinox does some tricks when it comes to hiding already > > loaded > > > classes. Maybe Felix developers can take a look at what Equinox is > doing > > > and perhaps do something similar in Felix thus making Felix more > > resilient > > > to "polluted" classloaders. > > > > > > /Bengt > > > > > > > > > > > > 2010/11/18 Charles Moulliard <[email protected]> > > > > > > > Hi, > > > > > > > > Some months ago, an interesting question has been drawn about the > > > > classloading issue of log4j class when we use pax-logging bundle > within > > > > Felix embedded in a web application. > > > > > > > > http://www.mail-archive.com/**[email protected]/msg04908.**html< > > > http://www.mail-archive.com/[email protected]/msg04908.html> > > > > > > > > I'm faced to the same issue when I would like to use Apache Karaf > (top > > > > level container of Apache Felix) deployed as a WAR. > > > > > > > > Does anybody has find a trick to solve the classloading issue ? > > > > > > > > INFO: locking > > > > 2010-11-18 18:08:36.667:INFO::Started [email protected]. > ** > > > > 0:8080 <http://[email protected]:8080> > > > > [INFO] Started Jetty Server > > > > [INFO] Starting scanner at interval of 10 seconds. > > > > log4j:ERROR A "org.apache.log4j.**ConsoleAppender" object is not > > > > assignable to a "org.apache.log4j.Appender" variable. > > > > log4j:ERROR The class "org.apache.log4j.Appender" was loaded by > > > > log4j:ERROR [4.0] whereas object of type > > > > log4j:ERROR "org.apache.log4j.**ConsoleAppender" was loaded by > > > > [ContextLoader@ServiceMix Embedded Example]. > > > > > > > > > > > > Regards, > > > > > > > > Charles M. > > > > Apache Camel, ServiceMix & Karaf committer > > > > > > > > > > > > > > > -- > > Karl Pauls > > [email protected] > > http://twitter.com/karlpauls > > http://www.linkedin.com/in/karlpauls > > https://profiles.google.com/karlpauls > > > -- Karl Pauls [email protected] http://twitter.com/karlpauls http://www.linkedin.com/in/karlpauls https://profiles.google.com/karlpauls
