java - Netbeans 中的 OSGi,检索服务时出现 ClassCastException

标签 java netbeans osgi classcastexception apache-felix

我遇到了类加载器问题。 因为我是一个 osgi 新手,希望答案不是那么难:)

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

编译 FelixHost 时使用下一个 jar

  • 菲利克斯.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

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

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

欢迎任何想法。

最佳答案

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

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

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

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

关于java - Netbeans 中的 OSGi,检索服务时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1255051/

相关文章:

netbeans - 如何关闭netbeans欢迎屏幕?

java - Java 中的 GridView

java - 如何在抽象类中的OSGI中获取EntityManager?(如spring @PersistenceContext)

java - Android 对话框和内存

java - 在 Netbeans 7.3.1 + JDK1.7.0_40 中编译 JAVAFX

java - 在 Javalin 应用程序中使用 JPA

java - 使用 bndtools 启动 Eclipse 3.x RCP 应用程序

Java 和 telnet - java.net.SocketException : Broken pipe

java - 实现实时网络仪表板

java - 使用 HTML/JavaScript 创建具有非图像输出的交互式序列图