为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决原系统中嵌入osgi框架时的包冲突问题?

如何解决原系统中嵌入osgi框架时的包冲突问题?

慕婉清6462132 2018-12-14 19:11:13
如何解决原系统中嵌入osgi框架时的包冲突问题?
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

选了felix的osgi容器并在原系统启动时配置并调用了framework的start。既在原系统中嵌入了osgi。这时若原系统中存在log4j包,且在系统启动后导入新的bundle中也有log4j包时会爆如下错误信息:
log4j:ERROR A "org.apache.log4j.xml.DOMConfigurator" object is not assignable to a "org.apache.log4j.spi.Configurator" variable.
log4j:ERROR The class "org.apache.log4j.spi.Configurator" was loaded by
log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@c88440] whereas object of type
log4j:ERROR "org.apache.log4j.xml.DOMConfigurator" was loaded by [sun.misc.Launcher$AppClassLoader@19821f].
log4j:ERROR Could not instantiate configurator [org.apache.log4j.xml.DOMConfigurator].
log4j:WARN No appenders could be found for logger (testosgi2.Activator).
log4j:WARN Please initialize the log4j system properly.
感觉出错的原因是因为加载的classloader不同造成的冲突,org.apache.log4j.spi.Configurator是由org.apache.felix.framework.BundleWiringImpl加载的,而org.apache.log4j.xml.DOMConfigurator是由sun.misc.Launcher$AppClassLoader(原系统)加载的。
最后两个WARN则表示找不到配置文件,(原系统能打印日志,bundle中却不能)。

查看完整回答
反对 回复 2019-01-13
  • 1 回答
  • 0 关注
  • 843 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信