1

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

例如,假设我有以下组成(使用 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());

这个引用真的会失败,因为它的范围在组合之外吗?

如果组合内的组件包含对在组合外发布的服务的引用怎么办?这个引用也会失败吗?

注意:我目前对进口或出口服务不感兴趣。

4

1 回答 1

0

iPOJO 组合依赖于 iPOJO 服务上下文。在 iPOJO 中,常规的 OSGi 包上下文由两部分组成:以包为中心的部分负责类加载活动,以服务为中心的部分负责所有服务交互(发布、查找、绑定......)。

当一个实例在组合内运行时,它作为“本地”服务上下文,使用本地服务注册表(来自组合的注册表)。因此,从组合内部注册的服务无法从外部访问,因为它们使用两个不同的服务注册表:组合的一个和来自 OSGi 框架的一个。

于 2014-02-16T07:13:35.117 回答