在java项目中访问osgi声明性服务

时间:2013-07-23 20:18:20

标签: java osgi

我试图在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。 ......但是那个让我更清楚的东西。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您传入的类是由OSGi包类加载器加载的,则

FrameworkUtil.getBundle(Class)仅返回非null。这意味着你实际上需要在OSGi包中。

你需要更清楚自己想做什么。 “在Java项目中访问OSGi DS”几乎毫无意义。此外,由于您似乎刚刚开始使用OSGi,为什么不从简单的事情开始,比如通过基础教程,而不是深入研究?

最后请注意以下代码段是无意义的:MyClass.class.getClass()。文字MyClass.class已经为您提供了您想要的课程...如果您随后致电getClass,您将获得java.lang.Class的课程!这几乎肯定不是你想要的。