首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从OSGI外部调用OSGI服务?

如何从OSGI外部调用OSGI服务?
EN

Stack Overflow用户
提问于 2016-11-22 05:16:30
回答 1查看 898关注 0票数 0

我正在考虑编写OSGI包,并将其公开为OSGI服务。现在,我想从另一个java模块调用这个OSGI服务,假设OSGI和java模块运行在同一个JVM中。

这有可能从OSGI外部调用OSGI公开服务吗?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 17:21:18

BundleContext需要获得一个ServiceReference,这是获取Service所必需的。

假设MyService在您的类路径中,并且在OSGi容器中只有一个实现服务:

代码语言:javascript
复制
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;

[...]

BundleContext bundleContext = FrameworkUtil.getBundle(MyService.class).getBundleContext();
ServiceReference<MyService> serviceReference = bundleContext.getServiceReference(MyService.class, null);
try {
    MyService myService = bundleContext.getService(serviceReference);
    // do something with myService
} finaly {
    bundleContext.ungetService(serviceReference);
}

变体

  1. MyService在您的类路径中不可用。这不是一个问题,因为您可以使用部署到OSGi容器中的FrameworkUtil.getBundle()方法的任何类,并且可以将一个字符串(FQCN)传递给BundleContext#getServiceReference()方法。
  2. MyService有多个实现。对BundleContext#getServiceReference()的第二个参数使用LDAP过滤器,或者调用BundleContext#getServiceReferences()方法,该方法将返回数组或使用相同的代码并依赖于ServiceRanking
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40734251

复制
相关文章

相似问题

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