2014-02-11 10 views
1

iPOJO는 원시 유형 구성 요소의 인스턴스를 포함하는 합성을 생성하는 메커니즘을 제공합니다. 필자는 iPOJO가 컴포지트 서브 인스턴스가 제공하는 서비스에 대한 격리가 컴포지트 외부에서 액세스되는 것을 제공하는 메커니즘을 이해하는 데 관심이 있습니다. exmaple를 들어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 번들 컨텍스트는 클래스 로딩 활동을 담당하는 번들 중심 부분과 모든 서비스 상호 작용 (발행, 조회, 바인딩 등)을 담당하는 서비스 중심 부분의 두 부분으로 구성됩니다.

인스턴스가 로컬 서비스 레지스트리 (컴포지트 서비스 레지스트리)를 사용하여 '로컬'서비스 컨텍스트로 복합 인스턴스 내에서 실행될 때. 따라서 복합체 내부에서 등록 된 서비스는 복합체와 OSGi 프레임 워크의 두 가지 다른 서비스 레지스트리를 사용하므로 외부에서 액세스 할 수 없습니다.