有没有办法轻松跟踪多个 OSGi 服务?
Is there a way to easily track multiple OSGi services?
我正在寻找无需创建许多 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
}
});
您不能仅使用基本的 OSGi API 跟踪一项以上的服务。实现这一点的最简单方法是创建一个声明性服务组件,其中包含一些强制性服务引用和 immediate=true。当所有强制引用都存在时,将调用此服务的@Activate 方法。
@Component(immediate=true)
public class MyComponent {
@Reference
ServiceA sa;
@Reference
ServiceB sb;
@Reference
ServiceC sc;
@Activate
public void activate() {
}
}
我正在寻找无需创建许多 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
}
});
您不能仅使用基本的 OSGi API 跟踪一项以上的服务。实现这一点的最简单方法是创建一个声明性服务组件,其中包含一些强制性服务引用和 immediate=true。当所有强制引用都存在时,将调用此服务的@Activate 方法。
@Component(immediate=true)
public class MyComponent {
@Reference
ServiceA sa;
@Reference
ServiceB sb;
@Reference
ServiceC sc;
@Activate
public void activate() {
}
}