繁体   English   中英

OSGi felix:在主机应用程序和捆绑包之间共享一个类可能吗?

[英]OSGi felix: Sharing a class between the host application and a bundle possible?

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

每当我尝试在我的宿主应用程序中使用Vehicle类时,它会实现felix框架和bundle,我就会遇到链接错误。 阅读以下博客文章( http://frankkieviet.blogspot.com/2009/03/javalanglinkageerror-loader-constraint.html )后,我明白了为什么会出现此错误。 但我不知道如何解决我的问题。

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

BR,

马库斯

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

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

在初始化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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM