2012-08-31 5 views
2

번들이 완전히로드되어 요청에 사용할 수 있는지 여부를 감지하는 BundleEvent 클래스와 같은 모든 종류의 이벤트 리스너가 있습니까?번들이 osgi 컨테이너에 완전히로드되었는지 감지하는 방법은 무엇입니까?

나는 검색을 만들어 내가 찾을 수있는 모든 사용 이벤트 리스너를 나던 내가 수동으로 또는 주기적으로 (내가하는 방식으로 코드의 조각을 테스트 didnt가 확인해야한다는 것을 의미 this

입니다.

로드 작업을 위해 BundleEvent.STARTING과 같은 이벤트가 있습니까? 아니면 가능한 경우 직접 구현해야합니까?

+1

원하는 작업이 무엇? 해당 번들에서 서비스를 사용하면 서비스가 사용 가능하게되거나 사라질 때 알림을 받게됩니다. 왜 번들 자체를 감지해야합니까? – Thilo

+0

기본적으로 내가하고 싶은 것은 번들이 컨테이너에 완전히로드되어 있고 어떤 req가오고 있는지를 탐지하는 것입니다 ... 예를 들어, 번들 A와 번들 B 같은 번들을 스크립트로 배포하고 있습니다. B는 A의 일부 서비스에 종속됩니다. 따라서 B를 배포하거나 실행하는 동안 B는 A가 완전히 사용 가능할 때까지 기다려야합니다.번들 A가 완전히로드 된 경우 우리에게 통지 할 수있는 방법이 있는지 알고 싶습니다. 따라서 스크립트는 번들 B를 계속 배포 할 수 있습니다. – stephanruhl

답변

2

OSGi에는 두 가지 종류의 종속성이 있습니다. 첫 번째 종류는 기본적으로 번들을 안전하게 실행할 수있는 환경을 설정하는 것입니다. 여기에는 코드 종속성과 매니페스트에서 표현할 수있는 다른 종속성이 포함됩니다. 프레임 워크는 번들을 해결하기 전에 이러한 종속성이 충족되도록합니다. 이러한 종속성이 충족되지 않으면 단일 명령을 실행할 수 없습니다.

종속성의 두 번째 종류는보다 동적이며, 코드는 런타임에 변경 될 때 코드를 처리 할 수 ​​있어야합니다. OSGi에서 이러한 종속성은 가장 잘 표현 된 서비스입니다. 선언적 서비스 (특히 주석이있는 서비스)에서는 다른 사람들에게 의존하는 것이 쉽지 않습니다. (제발, 서비스 트래커를 사용하지 마십시오. DS는 훨씬 멀리 떨어져 있습니다.)

다른 응답자가 말했듯이, 준비는 보는 사람의 눈에 있습니다. OSGi에서 서비스에 대한 의존성을 표현할 때 문제가 번들에서 벗어나 준비가되면 다음과 같이 할 수 있습니다. 서비스 X가 있습니까? 레지스트라 서비스 X가 이러한 규칙을 따르는 한 매우 강력하고 탄력있는 응용 프로그램 모델을 보유하게됩니다. 프레임 워크와 DS는 라이프 사이클 규칙을 엄격하게 따르므로 한 번에 하나의 모델에서 번들이 준비되었거나 붕괴되지 않는 이유는 여러 가지입니다.

짧은 예를 들어, 서비스 Y는 서비스 X에 따라 달라집니다

@Component 
public class YImpl implements Y { 

    @Activate 
    void activate() { /* only called when X is registered */ } 
    @Reference 
    void setX(X x) { 
     this.x = x; 
    } 

}

3

OSGi 프레임 워크에서 번들이 비즈니스에 "준비"되어 있는지 알 수있는 방법이 없습니다. 물론 프레임 워크는 cla를 허용하기 위해 번들의 코드 의존성을 해결할 수 있습니다 적재 될 것이다. 그러나 다른 종속성은 프레임 워크에서 알 수 없습니다. 번들 만 비즈니스 준비가되었는지 알 수 있습니다. 이것을 알려주는 서비스를 등록하는 것으로 광고 할 수 있습니다.

3

BJ가 언급했듯이 한 가지 옵션은 OSGi 서비스를 사용하는 것입니다. 예를 들어, 번들 B는 서비스가 나타날 때까지 대기합니다. 번들 A가 준비되면 (예 : 활성화 완료) 서비스를 등록합니다. 그러면 번들 B에 알릴 것입니다. ServiceTracker을 사용할 수 있습니다.

또 다른 옵션은 BundleTracker입니다. 번들 B의 활성기에서 BundleTracker을 등록하면 STARTED 번들 상태에 대한 알림을받을 수 있습니다. 그러나 다른 상태를 모니터링하여 번들이 사라질 때를 알 수 있습니다.

관련 문제