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

每次我尝试在我的宿主应用程序中使用Vehicle类时, 它实现了felix框架和捆绑,我得到了一个联系 错误。阅读以下博客文章后 ( 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束所需的框架片段)。我 THINK 以下内容适用于Felix,我知道它在Equinox中有效。

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

在初始化OSGi运行时之前,请设置此属性“org.osgi.framework.system.packages”。包括由分号“;”分隔的包(无通配符)。您可能还需要包括基本osgi包,“org.osgi.framework”和“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归因
不隶属于 StackOverflow
scroll top