当前位置: 首页 > 面试题库 >

OSGi的类加载问题

戈建白
2023-03-14
问题内容

我使用了来自Maven回购的log4j-1.2.17捆绑包。我尝试在捆绑软件中执行此代码(我的捆绑软件调用了log4j-1.2.17捆绑软件)

    PropertyConfigurator.configure(props());
private static Properties props() {
    Properties props = new Properties();
    props.put("log4j.rootLogger", "INFO, R");
    props.put("log4j.appender.R",
            "org.apache.log4j.DailyRollingFileAppender");
    props.put("log4j.appender.R.File", "logs/IhtikaClient.log");
    props.put("log4j.appender.R.Append", "true");
    props.put("log4j.appender.R.Threshold", "INFO");
    props.put("log4j.appender.R.DatePattern", "'.'yyyy-MM-dd");
    props.put("log4j.appender.R.layout", "org.apache.log4j.PatternLayout");
    props.put("log4j.appender.R.layout.ConversionPattern",
            //"%d{HH:mm:ss,SSS} %c - %m%n");
            //"[%5p] %d{yyyy-MM-dd mm:ss} (%F:%M:%L)%n%m%n%n");
            "[%5p] %d{yyyy-MM-dd mm:ss} %c (%F:%M:%L)%n%m%n");
    return props;
}

但是我有错误

log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" 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@9da1dd] whereas object of type 
log4j:ERROR "org.apache.log4j.DailyRollingFileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@4b222f].
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" 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@9da1dd] whereas object of type 
log4j:ERROR "org.apache.log4j.DailyRollingFileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@4b222f].
log4j:ERROR Could not instantiate appender named "R".

捆绑包已按顺序加载

.getBundleContext().installBundle("......../log4j-1.2.17.jar")
.getBundleContext().installBundle("......../I_MainForm-1.0-SNAPSHOT.jar")

如何解决这个错误?拜托,对不起我的英语。最好的问候,亚瑟。


问题答案:

由于您的Log4j类似乎已由sun.misc类加载器加载,我认为某些东西正在从OSGi外部提供log4j类。有Log4J条目解释了为什么它无法加载Log4J类的事实意味着,已经存在某个版本的Log4J 。

您是否正在使用Felix的定制版本?如果可以,您能否找到带有org.osgi.framework.system.packages=...条目或org.osgi.framework.system.packages.extra=...条目的配置文件之类的东西?

如果仅删除Log4j捆绑包会怎样?还能找到Log4j类吗?



 类似资料:
  • 我正在进行一个使用 spring 3.2.5 .发布hibernate 4.2.15 .最终版karaf 3.0.x 安装自定义包(包含所有实体类)时,<code>抛出PersistentClass名称不能转换为类</code>异常 请在下面找到我的karaf捆绑包列表 查找以下例外 我猜,实体类扫描不正常。这是我的配置 编辑: 请查找以下清单标题条目 我不能解决这个问题。如果任何人有想法,请与我

  • 我有OSGI bundle(比方说A),它依赖于非OSGI库(比方说B)。B正在使用class.ForName加载一个类(库A中的ClassA是库B中的ClassB类型)。我已经包装了库B,使其成为osgi捆绑包,并导入了库A中所需的包,但我无法使用class.forname加载该类。请注意,库B是第三方库,我没有任何控制这一点。 下面是我创建的支持OSGI的库B的清单文件- manifest-v

  • 我正在开发一个具有多个模块的基于Eclipse3.7RCP的应用程序。模块A是一系列库,包括MyBatis-3.2.2.jar。模块B依赖于模块A(manifest.mf中的Require-Bundle),并具有使用MyBatis访问数据库中数据的代码。我在模块B中导出了带有映射器类和XML的包,并在模块A中导入了它们。我正在代码中构建SqlSessionFactory,如果我按名称添加所有映射器

  • 我对Weblogic类加载器有问题。 当我尝试在WL 12.2.1.2.0上部署我的应用程序时,它失败了。在我服务器上的日志中,我看到了 该类属于xml API库。库进入我的应用程序时带有另一个依赖项(即传递依赖项)。xml API的版本是1.4.01。 之后,我在部署描述符中添加了异常: 然后是一个新的部署。所述问题与组织有关。w3c。dom。元素遍历已解决。没有关于缺少组织的任何信息。w3c。

  • 我正在利用mongoose类模式。 并为我的 Node 项目使用 TypeScript。 为了确保我的模型知道我定义的模式,所以我有自动完成等。 然而,模式类变得更加棘手。正如他们文件中所写的: loadclass()函数允许您从ES6类中提取方法、静态和虚拟化。类方法映射到模式方法,静态方法映射到模式静态,getters/setters映射到虚拟化。 所以我的代码看起来像: 我的目标是TypeS

  • 我是CXF和JAXB的新手。作为Java项目的一部分,我正在进行概念验证。试图从wsdl生成客户机,用Apache CXF替换应用程序中的weblogic依赖关系。我的应用程序基于OSGI模型,使用Adobe CQ 5.4作为UI开发的web工具。我的应用程序部署在Oracle weblogic server 10.3.4中,并使用java 1.6运行。 使用Ant1.8作为我的构建脚本来生成We