AFAIK DS를 사용하여 단일 소비자 정책을 적용 할 수 없습니다.
언뜻 보면 ServiceFactory일 수도 있고 일 수도 있고 가장 간단한 방법 일 것입니다.
Given Bundle A, Service S and Bundle B;
A gets S, then A ungets S, Bgets S, then A gets S.
이
프레임 워크의 캐시 잘 방해 캐시 S조차 생각 A가 이미 제공 할 수 있습니다 : "The Framework caches the value returned (unless it is null), and will return the same service object on any future call to BundleContext.getService for the same bundle. This means the Framework must not allow this method to be concurrently called for the same bundle"
그래서 내가 다음과 같은 경우에 실패합니다 생각 :
그러나 하나 caveat가있다 B가 보유하고 있습니다.
제가 생각할 수있는 유일한 대안은 FindHook을 사용하는 것입니다.이 방법은 좀 더 수준이 낮지 만 구현하고 싶을 수도 있습니다. 완성을 위해 다른 hooks (EventHook, ListenerHook).
후크를 사용하면 다른 번들에 서비스 가용성을 숨길 수 있습니다. 훅이 상태를 유지하기 때문에 장치 서비스와 동일한 번들로 원할 것이므로 장치 서비스의 번들을 중지하지 않고 훅을 중지하는 것은 불가능합니다.
표준에도 "서비스 번들이 서비스 사용을 해제 할 때까지 ServiceFactory에 의해 반환 된 서비스 객체가 프레임 워크에 의해 캐시됩니다."그래서 나는 이것이 문제가 될 것이라고 생각하지 않습니다. –
번들이 매번 새로운 인스턴스와 동시에 서비스를 사용해야하는 경우 어떻게해야합니까 ?? 어떻게 처리할까요? – Ravish
안녕하세요 @ Ravz, 네 질문에 닐이 대답, 나는이 질문에 대한 답변으로 ComponentFactory의 예를 보았다. http://stackoverflow.com/questions/7033222/osgi-using-servicefactories/7080234#7080234 HTH – earcam