【问题标题】:OSGi in Netbeans, ClassCastException when retrieving serviceNetbeans中的OSGi,检索服务时出现ClassCastException
【发布时间】:2009-08-10 13:57:20
【问题描述】:

我遇到了 ClassLoader 问题。 由于我是一个 osgi 新手,希望答案不是那么难:)

我认为这与编译库与运行时库有关。 在 Netbeans 6.7.1 项目属性中,编译时库总是传播到其他类别。所以我无法区分那里。

在编译 FelixHost 时会使用下一个 jars

  • Felix.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

但在运行时,框架会加载 OBR 的实现。 此 OBR 捆绑包还包含接口定义。我认为这就是为什么会有一个 classCastException..

我实际上希望 FelixHost 与 OBR 一起做一些初始 配置..

欢迎提出任何想法。

【问题讨论】:

标签: java netbeans osgi classcastexception apache-felix


【解决方案1】:

我假设您所说的“FelixHost”指的是封装和启动 Felix 框架的项目。

问题是你必须小心“OSGi 世界”和“非 OSGi 世界”之间的界限。您在 FelixHost 的类路径中放置的所有内容(即在您的情况下也是所有编译时依赖项)基本上都存在于 OSGi 世界之外,因此不建议使用像“osgi.service.obr-1.0.2.jar”这样的包这样。

正如您所指出的,如果 OSGi 框架还加载“osgi.service.obr-1.0.2.jar”包,您将进入 ClassCastException,因为您基本上有两个版本的相同类(接口)。

此问题的一个可能解决方案是将您的初始供应逻辑分离到一个单独的包中,并在 OSGi 世界中执行与 OBR 相关的工作。然后你可以去掉FelixHost对“osgi.service.obr-1.0.2.jar”的编译依赖,只加载一份OBR接口。

【讨论】:

  • 我实际上已经在规范中阅读过它,并且在输入问题时它对我来说变得越来越清楚。感谢您提供非常清晰的信息。我相信它对其他 OSGi 新手也很有用 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2013-04-02
  • 2014-04-04
  • 2018-01-26
  • 1970-01-01
  • 2016-01-26
  • 2014-06-04
相关资源
最近更新 更多