Hi Richard, I've "solved" the issue by commenting out the static initialisation in ExtensionManager. It's still completely obscure for me, I just searched the code and found this "felix://extension" URL that was only refered there.
Now eveything looks OK (at least I can run log4j correctly, and instantiate a "SimpleDateFormat". Of course now I have to test the complete application... I put some output traces in the code, and it turned out that there was an (almost) infinite recursion in UrlHandlers.createURLStreamHandler, trying to create a streal handler for the "felix" protocol. Conerning jamvm, for these tests I used a debian package. Best regards, Anne -----Message d'origine----- De : Richard S. Hall [mailto:[EMAIL PROTECTED] Envoyé : mardi 4 décembre 2007 16:40 À : [email protected] Objet : Re: Problem with log4j on felix and jamvm Well, the issue for me is that I currently cannot compile JamVM for fedora (my machine's gcc installation seems to be messed up somehow and I have been unable to fix it)...I will work on getting JamVM working...if anyone knows of some binary RPMs for it and/or GNU Classpath that would greatly help. Once I can run JamVM, then perhaps you can send me a boiled down example to recreate the situation...feel free to send it any time. -> richard GERODOLLE Anne RD-MAPS-GRE wrote: > Hi Richard, > > I've just tried with the last version of felix, that is : I've updated from > svn, then run "mvn install" from the "main" folder. This downloaded the > dependencies from the central repository. > > Now, here is what happens on jamvm (note that everything works alright on > Sun's vm): > > If I run jamvm without parameters /usr/bin/jamvm -jar bin/felix.jar, and > without any changes to the generated configuration file : > I get first an "unknown protocol: http" when the obr bundle is loaded, which > I ignore (because I only want to install bundles from the file system, and it > works). > > Then, I install the log4j bundle from felix, and then my small example . > Instantiation of the Level class now works (no more "Duplicate class"). > but I get : "Unknown protocol: felix" in the initializarion of > LogManager, when calling Logger.getLogger(...); This semms to be in fact the > same problem as with the HTTP service : > log4j uses "AbsoluteTimeDateFormat", which in turn calls > Calendar.getInstance, and this results into this "unknown protocol: felix". > > If now I type "-Djava.protocol.handle.pkg=gnu.java.net.protocol , the problem > with "unknown protocol: http" disappears but the "unknown protocol: felix" > stay. > > If I choose "-Dfelix.service.urlhandlers=false", the calls to > Calendar.newInstance simply hang (looks like a deadlock), and the "start" > method of an activator calling "new SimpleDateFormat" just never returns. > > I agree with you that I have to solve the URL handler issue in felix 1.0.1 . > But I have no clue how to proceed. > > Best regards, > > Anne > > > -----Message d'origine----- > De : Richard S. Hall [mailto:[EMAIL PROTECTED] Envoyé : lundi 3 > décembre 2007 21:26 À : [email protected] Objet : Re: Problem > with log4j on felix and jamvm > > I believe there was a synchronization bug in class loading in Felix 0.8.0 > that opened a window for defining the same class more than once...this was > fixed in later versions of Felix...so, you might want to go back to trying to > solve the URL handler issue on Felix 1.0.1...perhaps you should try the > latest trunk build, since there were some changes that might impact the URL > handler stuff...regardless, were better off trying to get you on 1.0.x than > 0.8.0... > > -> richard > > GERODOLLE Anne RD-MAPS-GRE wrote: > >> Hi all, >> >> I got into classloading problems using log4j on felix and jamvm, as >> soon as I try to use log4j, for example calling Logger.getLogger. >> I'm including below a piece of code that exhibits the problem. >> The corresponding bundle works OK on felix on sun's VM . >> It works OK on prosyst mbs on jamvm. >> >> On felix on jamvm, I obtain a "duplicate class error", whether I'm >> using the log4j bundle from felix or embedding directly log4j in my >> test bundle. >> >> I'm using felix-0.8.0, due to unresolved problems with felix 1.0.1 on >> jamvm I mentionned earlier on this list ("unknown protocol: felix"). >> >> I have found a workaround : loading the "Priority" class in advance, >> by adding a line like Priority debug = Priority.DEBUG; But this means >> that I have to change the code of all bundles that use log4j :( >> >> Here is the "start" method of my activator : >> >> public void start(BundleContext context){ >> System.out.println("defining a variable of the >> org.apache.log4j.Level class"); >> org.apache.log4j.Level level; >> System.out.println("now trying to instantiate this variable"); >> level=org.apache.log4j.Level.DEBUG; >> } >> >> And here is the stack trace : >> ERROR: Error starting >> file:/home/gerodol/.m2/repository/com/francetelecom/osgi/test/log4j-t >> e st /0.1-SNAPSHOT/log4j-test-0.1-SNAPSHOT.jar >> (org.osgi.framework.BundleException: Activator start error.) >> java.lang.NoClassDefFoundError: org/apache/log4j/Level >> at com.francetelecom.test.LoggerTest.start(LoggerTest.java:38) >> at >> org.apache.felix.framework.util.SecureAction.startActivator(SecureAct >> i >> on >> .java:509) >> at org.apache.felix.framework.Felix._startBundle(Felix.java:1260) >> at org.apache.felix.framework.Felix.startBundle(Felix.java:1201) >> at >> org.apache.felix.framework.Felix.setFrameworkStartLevel(Felix.java:807) >> at >> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:256) >> at java.lang.Thread.run(Thread.java:710) >> Caused by: java.lang.LinkageError: duplicate class definition >> at java.lang.VMClassLoader.defineClass(Native Method) >> at >> java.lang.VMClassLoader.defineClassWithTransformers(VMClassLoader.jav >> a >> :3 >> 74) >> at java.lang.ClassLoader.defineClass(ClassLoader.java:472) >> at java.lang.ClassLoader.defineClass(ClassLoader.java:437) >> at >> org.apache.felix.framework.searchpolicy.ContentClassLoader.findClass( >> C >> on >> tentClassLoader.java:149) >> at >> org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassF >> r >> om >> Module(ContentClassLoader.java:51) >> at >> org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(Co >> n >> te >> ntLoaderImpl.java:121) >> at >> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassO >> r >> Re >> source(R4SearchPolicyCore.java:358) >> at >> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass( >> R >> 4S >> earchPolicyCore.java:136) >> at >> org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4Se >> a >> rc >> hPolicy.java:45) >> at >> org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass( >> C >> on >> tentClassLoader.java:70) >> at java.lang.ClassLoader.loadClass(ClassLoader.java:294) >> at com.francetelecom.test.LoggerTest.start(LoggerTest.java:38) >> >> Thanks in advance, >> >> Anne >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

