首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在应用程序中访问OSGI包上下文

在应用程序中访问OSGI包上下文
EN

Stack Overflow用户
提问于 2013-11-18 11:22:19
回答 2查看 886关注 0票数 0

我试图访问java应用程序中OSGI的上下文,以获得正在运行的服务。

代码语言:javascript
复制
ctx.getServiceReference(ReceiverService.class.getName());

我试过用这个:

代码语言:javascript
复制
BundleContext ctx = FrameworkUtil.getBundle(ReceiverService.class).getBundleContext();

但是它返回null。

我让Knopflerfish在图形模式下使用预装的捆绑包,然后启动SenderSevice包和ReceiveService包。我希望访问ReceiveService来使用Java应用程序中接收到的对象。因此,我需要访问ReceiveService包上下文。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-18 14:32:13

ReceiveService接口从哪里加载?它是从一捆里出口的吗?不幸的是,系统包不能从普通包中导入包。

由于您正在嵌入OSGi,并且在外部应用程序和内部框架之间进行服务通信,所以接口包必须由外部应用程序加载并使用org.osgi.framework.system.packages.extra属性导出。此属性通过您提供给FrameworkFactory.newFramework()的映射传递。然后,普通的包可以导入服务接口并发布服务。

要从外部应用程序访问BundleContext,必须对Framework对象使用getBundleContext()方法。这将返回系统包的BundleContext

票数 1
EN

Stack Overflow用户

发布于 2013-11-18 11:55:08

您似乎在使用嵌入在Java应用程序中的OSGi框架--您是如何启动该框架的?

标准的方法是

代码语言:javascript
复制
Framework framework = FrameworkFactory.newFramework(props);

然后,您可以从framework实例中获取system上下文:

代码语言:javascript
复制
BundleContext ctx = framework.getBundleContext();

在您的示例中,ReceiverService很可能是由应用程序类加载器加载的,而不是由包类加载器加载的,因此FrameworkUtil无法确定加载该类的包。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20046528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档