2009-08-10 24 views
0

即时通讯存在ClassLoader问题。 因为我相当一个osgi newby,希望答案并不困难:)Netbeans中的OSGi,检索服务时的ClassCastException

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

当编译FelixHost下一罐子用于

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

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

其实我是想在FelixHost与OBR做一些初步 配置一起工作..

任何想法都欢迎。

+0

我了Felix网站上此给出具体信息: http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html#ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage – Houtman 2009-08-17 07:39:32

回答

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接口副本。

+0

其实我也读到它在规范中,并且在输入问题时,它变得越来越清晰。感谢非常明确的信息。我相信它对其他OSGi新手​​也有用:) – Houtman 2009-08-11 06:43:07