有没有办法轻松跟踪多个OSGi服务?

时间:2016-12-01 09:31:38

标签: osgi

我正在寻找跟踪多个OSGI服务的方法,而无需创建许多ServiceTrackers。

类似的东西:

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 个答案:

答案 0 :(得分: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() {

    }

}