gpt4 book ai didi

java - Felix OSGI 嵌入式应用程序问题

转载 作者:行者123 更新时间:2023-11-30 02:54:40 24 4
gpt4 key购买 nike

我使用 Felix 作为嵌入式应用程序,如下所述, How to start and use Apache Felix from code? 。我想要做的是通过 OSGi 从我的主机应用程序动态加载 jar 文件并调用实现类的方法。

所以我有以下三个 Maven 项目

1) 一个具有接口(interface)的 Maven 项目。并导出该接口(interface)的包。 ---> 项目 A 。

2) 一个实现项目 --> ProjB,另一个 Maven 项目,它将 ProjA 作为 Maven 依赖项导入,并使用具体类在其上实现接口(interface)。另外,在这个项目中,我为 ProjA 接口(interface)包做了 OSGi import-package。另外,我在这里通过激活器在 OSGI 上注册我的实现。

3) 然后是托管应用程序 ProjC。我在那里所做的是,

    HostActivator activator = new HostActivator();
List<Object> list = new LinkedList<Object>();
list.add(activator);
map.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
Felix f = new Felix(map);
f.start();

Bundle a = f.getBundleContext().installBundle("file:C:/ProjA.jar");
Bundle b = f.getBundleContext().installBundle("file:C:/ProjB.jar"); ); // dirty path ;)
b.start();

ServiceReference sr = activator.getContext().getAllServiceReferences(MyInterface.class.getName(), "(" + "osgi-device-name" + "=*)")[0];
MyInterface dictionary = (MyInterface) activator.getContext().getService(sr);
dictionary.doAction();

在施放之前一切正常。在那里我可以看到以下错误,

Exception in thread "main" java.lang.ClassCastException: projB.MyImplementation cannot be cast to projA.MyInterface
at MyHostApplication.MyMainClass.main(MyMainClass.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

任何人都可以帮助我解决这个问题,对我来说这似乎是 felix 上的一个错误。

最佳答案

ProjA 位于主项目(打开嵌入式 OSGi 容器)的类路径上,并且它也作为 bundle 安装到嵌入式 OSGi 容器中。当 ProjB 被解析时,它会连接到 ProjA 包,因此它实现了来自已安装的 projA 包的接口(interface)。

当您尝试转换结果对象时,您会尝试转换到主项目的类路径上的接口(interface)。这是 ProjB 包实现的不同接口(interface),因为它实现了 projA 包的接口(interface)。

您不应将 ProjA 作为 bundle 安装到 OSGi 容器中。您应该确保 ProjB bundle 可以解析。为此,您应该将 projA 作为系统包添加到嵌入式 OSGi 容器中。

关于java - Felix OSGI 嵌入式应用程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com