2014-08-30 3 views
1

번들이 중지되었을 때 어떤 일이 발생하고 그에 따라 달라지는 번들의 결과에 대한 이해를 해결하려고합니다.해결 된 상태의 번들에 대한 번들 종속성

예를 들어 A와 B 두 개의 번들이있는 경우 번들 A는 (OSGi 프레임 워크 제외) 종속성이 없지만 일부 패키지를 내 보냅니다. 번들 B는 A에서 패키지를 가져오고 이후에 클래스를 사용하지만 서비스가 아닌 경우 해당 클래스를 사용합니다. 두 번들 모두 OSGi 프레임 워크에 설치되어 상태가 '활성'으로보고됩니다.

상황이 발생하면 번들 A가 '해결됨'상태로 올바르게 번들 전환을 이해할 수 있도록 번들 A가 중지되지만 재시작되지 않습니다. 이는 번들 A의 모든 내보내기를 사용할 수 없다는 것을 의미하며, 그렇다면 번들 B도 A가 수행 할 때 프레임 워크에 의해 자동으로 중지되어야합니까?

답변

1

번들 B가 시작되면 번들 A도 시작됩니다. 그러나 번들 A가 중지되면 번들 B가 중지되지 않습니다.

이 정지
  • 프레임 워크 시작 레벨은 번들 B의 시작 레벨 이하가 번들 B에서 호출
    • 번들 B가 해결되지 않은
    된다 : 번들 B 중지 이유를 세 가지 이유가있을 수 있습니다

    또한 번들 A에서 제거를 호출하면 번들 B가 계속 활성화됩니다. 그 이유는 번들 A가 "제거 대상으로 표시"상태가 될 것이지만 모든 항목이 연결될 때까지 완전히 제거되지 않기 때문입니다. 번들 B에서 새로 고침을 호출하면 배선이 제거됩니다.

  • +0

    내 OSGI 콘솔에서 A를 제거한 후에도 Bundle B를 새로 고치고 해결하고 활성화 할 수 있습니까? 그 이유는 무엇입니까? – Ngupta

    1

    해결 된 상태와 활성 상태의 차이점은 활성기의 시작/중지 방법 만 실행하는 것입니다. 따라서 번들 A를 중지하는 것은 번들 A의 클래스 만 사용하고 등록 해제 될 서비스는 사용하지 않는 한 번들 B에 영향을 미치지 않습니다.

    사실 번들 A에 BundleActivator가 없으면 번들은 전혀 변경하지 않고 해결 -> 활성 또는 활성 -> 해결 된 상태로 전환됩니다.