Что такое чистый OSGi-эквивалент для Eclipse Platform.getBundle () - PullRequest
2 голосов
/ 05 мая 2011

Что такое чистый OSGi, эквивалентный следующему вызову платформы Eclipse:

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

Ответы [ 3 ]

7 голосов
/ 05 мая 2011

Прямого эквивалента getBundle(String symbolicName) не существует, и в обычном OSGi нет подобных статических помощников, поскольку в виртуальной машине может быть несколько платформ.

Как указывает Амир, вы можете использовать getBundle(long id), чтобы получить пакет, если вы знаете его 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, который загружал данный класс, даже для фрагментов.

0 голосов
/ 05 сентября 2013

В простой OSGi вы можете использовать PackageAdmin сервис org.osgi.service.packageadmin.PackageAdmin.getBundles(String, String)

0 голосов
/ 19 февраля 2013

Начиная с OSGi 1.6 существует также метод BundleContext.getBundle (String) , если у вас уже есть BundleContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...