我试图在java项目中访问osgi ds。我在互联网上找到了这样的例子:
BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
ServiceReference serviceReference = context.getServiceReference(MyClass.class.getName());
MyClass blah = (MyClass) new ServiceTracker(context, serviceReference, null).getService();
blah.doStuff();
这里的问题是,如果我在java类中运行它,那么“context”变量为null。我想这可能是因为它不在osgi包中。
我试过去处理事情,如果我这样改变它就可以了:
BundleContext context = FrameworkUtil.getBundle(Myclass.class).getBundleContext();
但说实话,我真的不明白这个捆绑上下文。 究竟是什么,它是否与引用类相同?
手动说明以下内容: context - 完成跟踪的BundleContext。 ......但是那个让我更清楚的东西。
谢谢!
答案 0 :(得分:2)
FrameworkUtil.getBundle(Class)
仅返回非null。这意味着你实际上需要在OSGi包中。
你需要更清楚自己想做什么。 “在Java项目中访问OSGi DS”几乎毫无意义。此外,由于您似乎刚刚开始使用OSGi,为什么不从简单的事情开始,比如通过基础教程,而不是深入研究?
最后请注意以下代码段是无意义的:MyClass.class.getClass()
。文字MyClass.class
已经为您提供了您想要的课程...如果您随后致电getClass
,您将获得java.lang.Class
的课程!这几乎肯定不是你想要的。