2014-02-11 65 views
1

iPOJO提供了一種機制來創建包含原始類型組件實例的組合。我有興趣瞭解iPOJO爲合成子實例提供的服務提供隔離以便從組合外部訪問的機制。iPOJO Composite中的隔離工作如何?

對於〔實施例,假設我有以下組成(使用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(); 

假設組件「省」實現所謂HelloService服務接口。這是什麼意思,這項服務是孤立的?

這是否意味着如果我試圖通過具有服務引用來自外部包(未複合的一部分)訪問服務:

ServiceReference ref = 
        context.getServiceReference(HelloService.class.getName()); 

這是參考真的要失敗,因爲它的範圍是在組合之外?

如果組合內部的組件包含對組合外發布的服務的引用,該怎麼辦?這個參考是否也會失敗?

注意:我目前對導入或導出的服務不感興趣。

回答

0

iPOJO組合依賴於iPOJO服務上下文。在iPOJO中,常規OSGi包上下文由兩部分組成:負責類加載活動的以bundle爲中心的部分和負責所有服務交互(發佈,查找,綁定...)的以服務爲中心的部分。

當一個實例在一個組合內部運行時,使用本地服務註冊表(來自組合的)作爲「本地」服務上下文。因此,從組合內部註冊的服務不能從外部訪問,因爲它們使用兩個不同的服務註冊表:複合體的一個和OSGi框架中的一個。