Netbeans中的OSGi,检索服务时的ClassCastException

时间:2009-08-10 13:57:21

标签: java netbeans osgi classcastexception apache-felix

我有一个ClassLoader问题。 因为我非常喜欢osgi,希望答案不是那么难:)

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

编译FelixHost时,使用下一个罐子

  • Felix.jar
  • OSGi的core.jar添加
  • OSGi的compendium.jar
  • osgi.service.obr-1.0.2.jar

但是在运行时,框架将为OBR加载一个实现。 该OBR包还包含接口定义。我想这就是为什么有一个classCastException ..

我实际上希望FelixHost与OBR一起做一些初步的工作 供应..

欢迎任何想法。

1 个答案:

答案 0 :(得分: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相关的工作 。然后,您可以在“osgi.service.obr-1.0.2.jar”上删除FelixHost的编译依赖项,并且只加载一个OBR接口副本。