2016-12-01 88 views
0

我正在尋找方式來追蹤多個OSGI服務,而無需創建許多ServiceTracker的麻煩。有沒有辦法輕鬆跟蹤多個OSGi服務?

類似的東西:

library.track(Service1.class, Service2.class, Service3.class, new Tracker(){ 
    void servicesAdded(Service1 s1, Service2 s2, Service3 s3){ 
     //do something with all 3 services 
    } 
    void servicesRemoved(){ 
     //one of the services is not available, no operation possible 
    } 
}); 

回答

1

只使用基本的OSGi的API無法跟蹤多個服務。實現這一目標的最簡單方法是創建一個聲明式服務組件,其中包含一些強制服務引用和immediate = true。當所有強制性參考都存在時,將調用此服務的@Activate方法。

@Component(immediate=true) 
public class MyComponent { 
    @Reference 
    ServiceA sa; 

    @Reference 
    ServiceB sb; 

    @Reference 
    ServiceC sc; 

    @Activate 
    public void activate() { 

    } 

} 
+0

謝謝,這看起來非常好。如果其中一個依賴關係不再可用,那麼是否會調用使用@Deactivate註釋的方法? –

+0

是的。當其中一個服務不再可用時,將調用@Deactivate方法,並銷燬該組件的實例。 –

相關問題