OSGi felix:在主机应用程序和捆绑软件之间共享类可能吗?
作者:互联网
在主机应用程序内部,我尝试实现一个简单的pushService,该服务
应用于将名为Vehicle的类的实例传输到OSGi
通过提供set和get方法.为了能够使用我的服务
将服务接口和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(它们正确地实现了将LAF作为osgi捆绑包所需的框架片段).我认为以下内容适用于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
标签:sharing,osgi,apache-felix,java,classloader 来源: https://codeday.me/bug/20191210/2102819.html