[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[equinox-dev] 2 versions of log4j-core.jar

Hi experts,

In the midst of the integrating a osgi/eclipse based program to an existing Java program, I am running into a problem with the double loading of log4j-core.jar. The original java program already has a log4j-core.jar loaded as part of the CLASSPATH when it is started. The said program in turns will launch the new osgi/eclipse based program through EclipseStarter:
***
EclipseStarter.setInitialProperties(buildDefaultProps());
EclipseStarter.startup(launcherArgs, null);
EclipseStarter.run(launcherArgs);
***


The osgi/eclipse program has another version of the log4-core.jar in the org.apache.jakarta_log4j_0.0.0. bundle. This bundle is a required bundle. As you can see, that the same classes will be loaded twice when my original Java program attempts to load the osgi/eclipse program. Hence I am getting a class cast error:
***
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassCastException: org.apache.log4j.ConsoleAppender cannot be cast to org.apache.log4j.Appender
at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:165)


at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:140)

at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:153)

at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:415)

at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:384)
at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:783)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:666)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:616)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:584)
at org.apache.log4j.xml.XMLWatchdog.doOnChange(DOMConfigurator.java:815)
at org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:80)


at org.apache.log4j.helpers.FileWatchdog.<init>(FileWatchdog.java:49)
at org.apache.log4j.xml.XMLWatchdog.<init>(DOMConfigurator.java:807)
at org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:574)


at org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:557)

  ...
***

Can someone advise me on how to solve this issue? I am thinking about ways like:
1. Make the OSGI know that log4j-core.jar is already present so don't load it again. Not sure how to do this or if this is even feasible.
2. Modify the bundle requirement of the various bundles in the plugins directory so the org.jakarta bundle will not be needed? I'd like to avoid this since this means I have to change someone else's nicely packaged bundles.


Regards,
Tom