如何在dockable中使用osgi服务? [英] How do I use an osgi service in a dockable?
本文介绍了如何在dockable中使用osgi服务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我有一个通过注释用作可停靠窗口的类,我该如何在该类中使用osgi服务?最好的办法是将其作为私人成员。
If I have for example a class that is used as a dockable window by annotating it, how am I supposed to use an osgi service in that class? The best would be to have it as a private member field.
推荐答案
你可以举例如。使用ServiceTracker:
You can eg. use a ServiceTracker:
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
...
@ViewDocking(...)
public class MyView extends SomeNode{
private final ServiceTracker<MyService, MyService> myServiceTracker;
private MyService myService;
public MyView(){
BundleContext bundleContext = FrameworkUtil.getBundle(MyView.class).getBundleContext();
myServiceTracker = new ServiceTracker<>(bundleContext, MyService.class,
new MyServiceTrackerCustomizer(bundleContext));
myServiceTracker.open(false);
}
...
public void setMyService(MyService myService) {
if (this.myService != null){
...
}
this.myService = myService;
if (this.myService != null){
...
}
}
...
private class MyServiceTrackerCustomizer implements
ServiceTrackerCustomizer<MyService, MyService> {
private final BundleContext context;
public MyServiceTrackerCustomizer(BundleContext context) {
this.context = context;
}
@Override
public MyService addingService(ServiceReference<MyService> reference) {
MyService myService = context.getService(reference);
setMyService(myService);
return myService;
}
@Override
public void modifiedService(ServiceReference<MyService> reference, MyService service) {
addingService(reference);
removedService(reference, service);
}
@Override
public void removedService(ServiceReference<MyService> reference, MyService service) {
setMyService(null);
context.ungetService(reference);
}
}
}
还有一个开放< a href =https://github.com/Drombler/drombler-fx/issues/38 =nofollow>问题是否以及如何使用CDI。
There is also an open issue if and how CDI could be used.
这篇关于如何在dockable中使用osgi服务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文