gpt4 book ai didi

java - OSGi 菲利克斯 : Sharing a class between the host application and a bundle possible?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:51 26 4
gpt4 key购买 nike

在我的主机应用程序中,我尝试实现一个简单的 pushService,它应用于将名为 Vehicle 的类的实例传输到 OSGiworld,通过提供set和get方法。为了能够使用我的服务将服务接口(interface)和 Vehicle 类导出到一个 jar 文件中,然后在应该使用该服务的包中导入该文件。

每次我尝试在主机应用程序中使用 Vehicle 类时,它实例化了 felix 框架和包,我得到了一个链接错误。阅读以下博客条目后( http://frankkieviet.blogspot.com/2009/03/javalanglinkageerror-loader-constraint.html )我明白为什么会出现这个错误。但我不知道如何解决我的问题。

是否可以在主机应用程序和 OSGi 之间共享一个类实例?也许我必须使用反射而不是导入 jar 文件?我查看了那个库 ( http://code.google.com/p/transloader/ ),我不确定这个库是否能够解决我的问题......

BR,

马库斯

最佳答案

有一次我使用 Felix 来完全按照您在自定义客户端-服务器应用程序中的要求进行操作。我已经切换到 Equinox(它们正确地实现了我将 swing LAF 作为 osgi 包所需的框架片段)。我认为以下将在 Felix 中工作,我知道它在 Equinox 中工作。

更新:我开始使用我的主机应用程序时走的路非常相似。我很早就意识到我需要将尽可能多的代码移动到真正的 OSGi 包中才能真正利用该平台。我的主机应用程序设置客户端/服务器通信并同步包;就是这样。我以前共享的几个类已经移到 bundle 中,我没有回头看。如果您的设计/应用程序可以支持将大部分代码捆绑在一起,我肯定会走那条路。即使需要进行一些重新设计,也是值得的。

在初始化 OSGi 运行时之前,设置此属性“org.osgi.framework.system.packages”以包含由分号“;”分隔的包(无通配符)。您可能还需要包含基础 osgi 包“org.osgi.framework”和基础服务“org.osgi.packageadmin”、“org.osgi.startlevel”、“org.osgi.url”。

我只是仔细研究了我的版本控制,发现了一个我还在使用 Felix 时的片段(Equinox 的设置几乎相同)

Map<String, String> configMap = new HashMap<String, String();

configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
"your.package;other.package;org.osgi.framework");

// setup other properties

Bundle systemBundle = new Felix(configMap, null);
systemBundle.start();

// Now you can use classes from "your.package" with explicity
// declaring them as imports in bundles

关于java - OSGi 菲利克斯 : Sharing a class between the host application and a bundle possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1012897/

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