我正在寻找跟踪多个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
}
});
答案 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() {
}
}