什么是Eclipse Platform.getBundle()的纯OSGi等价物

时间:2011-05-05 03:31:11

标签: java eclipse osgi

与以下Eclipse平台调用相同的纯OSGi是什么:

org.eclipse.core.runtime.Platform.getBundle([bundle-id]) - >束

3 个答案:

答案 0 :(得分:7)

没有直接等价的getBundle(String symbolicName),并且普通的OSGi没有这样的静态助手,因为VM中可能有多个框架。

正如Amir指出的那样,如果您知道它的ID,就可以使用getBundle(long id)来获取捆绑包。

如果您希望捆绑包具有给定的符号名称,在最高版本中,您可以执行类似的操作(假设您有BundleContext可用),

Bundle getBundle(BundleContext bundleContext, String symbolicName) {
    Bundle result = null;
    for (Bundle candidate : bundleContext.getBundles()) {
        if (candidate.getSymbolicName().equals(symbolicName)) {
            if (result == null || result.getVersion().compareTo(candidate.getVersion()) < 0) {
                result = candidate;
            }
        }
    }
    return result;
}

如果您由于某种原因没有BundleContext可用(我猜这些情况很少见),您可以尝试使用FrameworkUtil找一个,

FrameworkUtil.getBundle(getClass()).getBundleContext()

您可以通过它获取加载给定类的Bundle,甚至是片段。

答案 1 :(得分:0)

答案 2 :(得分:-2)

由于OSGi 1.6还存在方法BundleContext.getBundle(String),如果您已经有BundleContext。