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-test
/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(SecureAction
.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.java: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(Con
tentClassLoader.java:149)
at
org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassFrom
Module(ContentClassLoader.java:51)
at
org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(Conte
ntLoaderImpl.java:121)
at
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrRe
source(R4SearchPolicyCore.java:358)
at
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4S
earchPolicyCore.java:136)
at
org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4Searc
hPolicy.java:45)
at
org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(Con
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]