iPOJO复合材料中的隔离是如何工作的


iPOJO提供了一种机制来创建包含基元类型组件实例的组合。我有兴趣了解iPOJO为复合子实例提供的服务提供隔离的机制,以防止从复合外部访问。

对于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框架的一个。

相关内容

  • 没有找到相关文章

最新更新