2011-09-29 4 views
0

은 내가 선언적 서비스를 사용하고 수동으로하면은 OSGi의 구성 요소를 비활성화 유효합니까?은 OSGi DS 및 수동 구성 요소를 비활성화

예를 들어, 내가 구현, 구성 요소가 있다고 가정 해 봅시다 :

//component 
class Overseer(){ 
     List<ServiceReference> serviceRefs = ...//populate 

     private void doStuff(){ 
      serviceRef = serviceRefs[i]; 
      if(dontNeedThisAnymore){ 
       serviceRefs.remove(serviceRef); 
       serviceRef.getBundle().stop(); 

      } 
} 

답변

4

가장 좋은 방법은이가 ComponentContext API를 사용하여 동일한 번들의 다른 구성 요소에서입니다 할 수 있습니다. 그것의 활성화 방법에 PARAM로 ComponentContext 발생하도록

당신은 구성 요소를 작성할 수 있습니다. 해당 인터페이스는 enableComponentdisableComponent 메서드를 사용하여 동일한 번들의 다른 구성 요소를 활성화/비활성화하는 데 사용할 수 있습니다. 그들을 활성화하기 전에 다른 구성 요소에 필요한 설치 리소스에 사용할 수 있기 때문에

나는 이것을 "게이트 키퍼"구성 요소를 호출합니다. 예를 들어 작업을 수행하기 전에 데이터베이스를 시작해야하는 여러 구성 요소가있을 수 있습니다 ... 게이트 키퍼는 데이터베이스 시작을 처리 한 다음 enableComponent(null)을 호출하여 다른 구성 요소를 활성화합니다. 마찬가지로 게이트 키퍼가 데이터베이스가 종료되었음을 감지하고 그 시점에서 다른 구성 요소를 비활성화 할 수있는 경우 이 기능을 사용하려면 게이트 키퍼를 제외한 번들의 모든 구성 요소를 초기에 enabled="false"으로 설정해야합니다.

+0

이렇게하면 이러한 구성 요소에 대한 DS가 필요합니까? – drozzy

+0

아니요. –

관련 문제