0

我试图访问 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”变量为空。我想那可能是因为它不在 osgi 包中。

我尝试改变事物,如果我像这样改变它,它会起作用:

BundleContext context = FrameworkUtil.getBundle(Myclass.class).getBundleContext();

但老实说,我真的不明白这个捆绑上下文。它到底是什么,它可以是与参考类相同的类吗?

Manual 声明如下: context - 完成跟踪的 BundleContext。...但这并没有让我更清楚。

谢谢!

4

1 回答 1

2

FrameworkUtil.getBundle(Class)仅当您传入的类由 OSGi 捆绑类加载器加载时才返回非 null。这意味着您实际上需要在一个 OSGi 包中。

你需要更清楚你想要做什么。“在 Java 项目中访问 OSGi DS”几乎毫无意义。此外,既然您似乎刚刚开始使用 OSGi,为什么不从一些简单的事情开始,比如完成基本教程,而不是深入研究呢?

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

于 2013-07-23T21:08:33.837 回答