Проблема с загрузкой классов в OSGi и JNI

У меня есть приложение OSGi, которое отлично запускается и работает из командной строки. Однако в производственной среде это приложение нужно запускать из небольшой программы, написанной на C. Эта программа проверяет лицензию, выполняет другие действия и запускает виртуальную машину Java с использованием JNI с моим приложением. Таким образом, я получил странные ошибки от log4j и hibernate (я включил флаг JVM -verbose: class):

[Loaded org.apache.log4j.Appender from reference:file:/opt/dc/lib/log4j-1.2.15.jar]
[Loaded org.apache.log4j.Appender from file:/opt/dc/lib/log4j-1.2.15.jar]
...
[Loaded org.apache.log4j.RollingFileAppender from file:/opt/dc/lib/log4j-1.2.15.jar]
log4j:ERROR A "org.apache.log4j.RollingFileAppender" object is not assignable to a     "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by 
log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@eafb71] whereas object of type 
log4j:ERROR "org.apache.log4j.RollingFileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@1cde100].
log4j:ERROR Could not instantiate appender named "ROLLINGFILE".
...
[Loaded org.dom4j.DocumentFactory from reference:file:/opt/dc/lib/dom4j-1.6.1.jar]
...
[Loaded org.dom4j.DocumentFactory from file:/opt/dc/lib/dom4j-1.6.1.jar]
...
java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to     org.dom4j.DocumentFactory
    at org.dom4j.DocumentFactory.getInstance(DocumentFactory.java:97)
    at org.dom4j.io.DOMReader.<init>(DOMReader.java:38)
    at org.hibernate.util.XMLHelper.createDOMReader(XMLHelper.java:69)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1615)
    at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1218)

Почему эти классы загружаются дважды? Почему некоторые из них загружаются из Felix, а некоторые из загрузчика классов Java? У меня есть подозрение, что некоторый собственный код вызывает java (например, ведение журнала) до запуска приложения OSGi, а затем эти загруженные классы каким-то образом повторно используются, вызывая ClassCastExceptions - как я могу доказать или опровергнуть это?


person Kojotak    schedule 08.07.2012    source источник


Ответы (1)


Проблема была внутри программы запуска. Он добавлял все пакеты в путь к классам для JVM, хотя была необходима только банка Felix.

person Kojotak    schedule 10.07.2012