对于exmaple,假设我有以下组成(使用iPOJO API):
PrimitiveComponentType prov = createAProvider(); // Create a primitive type
PrimitiveComponentType cons = createAConsumer(); // Create another primitive type
CompositeComponentType type = new CompositeComponentType()
.setBundleContext(context)
.setComponentTypeName("comp1")
.addInstance(new Instance(prov.getFactory().getName())) // Create an instance in the composite
.addInstance(new Instance(cons.getFactory().getName()));
ComponentInstance ci = type.createInstance();
假设组件"prov"实现了一个名为HelloService
的服务接口。这个服务是孤立的意味着什么?
这是否意味着,如果我试图通过服务引用从外部捆绑包(而不是组合的一部分)访问服务
ServiceReference ref =
context.getServiceReference(HelloService.class.getName());
这个引用真的会失败吗,因为它的作用域在组合之外?
如果组合内部的组件包含对在组合外部发布的服务的引用,该怎么办?这个引用也会失败吗?
注:我暂时对进出口服务不感兴趣。
iPOJO组合依赖于iPOYO服务上下文。在iPOJO中,常规OSGi捆绑包上下文由两部分组成:负责类加载活动的以捆绑包为中心的部分和负责所有服务交互(发布、查找、绑定…)的以服务为中心的部件
当实例在组合中运行时,它将作为"本地"服务上下文,使用本地服务注册表(来自组合的注册表)。因此,从组合内部注册的服务不能从外部访问,因为它们使用两个不同的服务注册中心:组合的一个和OSGi框架的一个。