OSGi Феликс:Возможно ли совместное использование класса между хост-приложением и пакетом?

StackOverflow https://stackoverflow.com/questions/1012897

Вопрос

Внутри моего хоста я попытался реализовать простой толкатель, который должен использоваться для передачи экземпляра класса, названного транспортным средством в мир OSGI, путем предоставления метода набора и получения.Чтобы иметь возможность использовать службу, я экспортировал как сервисный интерфейс, так и класс транспортных средств в файл JAR и импортировал этот файл в пакете, который должен использовать Сервис.

Каждый раз, когда я пытался использовать класс транспортных средств в моем хост -приложении, который инстазупирует фреймворк Felix и пакет, я получил ошибку сцепления.После прочтения следующей записи в блоге (http://frankkieviet.blogspot.com/2009/03/javalanglinkageerror-loader-constraint.html) Я понял, почему возникает эта ошибка.Но я понятия не имею, как решить мою проблему.

Можно ли поделиться классом между хост -приложением и экземпляром OSGI?Может быть, мне придется использовать отражение вместо импорта файла jar?Я заглянул в эту библиотеку (http://code.google.com/p/transloader/), и я не совсем уверен, сможет ли эта библиотека решить мою проблему или нет...

БР,

Маркус

Это было полезно?

Решение

Одно время я использовал Felix, чтобы делать ТОЧНО то, что вы просите в специальном клиент-серверном приложении.С тех пор я перешел на Equinox (они правильно реализуют фрагменты фреймворка, которые мне нужны для качания LAF, в виде пакетов osgi).я ДУМАТЬ следующее будет работать в Феликсе, я ЗНАТЬ это работает в Равноденствии.

ОБНОВЛЯТЬ:Я пошел по тому же пути с моим хост-приложением.Я рано понял, что мне нужно переместить как можно больше кода в настоящие пакеты OSGi, чтобы по-настоящему воспользоваться преимуществами платформы.Мое хост-приложение настраивает связь клиент/сервер и синхронизирует пакеты;вот и все.Те немногие уроки, которыми я раньше делился, были перенесены в пакет, и я не оглядываюсь назад.Если ваш проект/приложение может поддерживать наличие большей части кода в пакетах, я бы определенно пошел по этому пути.Даже если потребуется некоторый редизайн, оно того стоит.

Перед инициализацией среды выполнения OSGi установите это свойство «org.osgi.framework.system.packages», чтобы включить пакеты (без подстановочных знаков), разделенные точкой с запятой «;».Возможно, вам дополнительно потребуется включить базовые пакеты osgi «org.osgi.framework» и базовые службы «org.osgi.packageadmin», «org.osgi.startlevel», «org.osgi.url».

Я только что покопался в системе контроля версий и нашел фрагмент, когда еще использовал Felix (настройка для Equinox почти такая же)

Map<String, String> configMap = new HashMap<String, String();

configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
    "your.package;other.package;org.osgi.framework");

// setup other properties

Bundle systemBundle = new Felix(configMap, null);
systemBundle.start();

// Now you can use classes from "your.package" with explicity 
// declaring them as imports in bundles
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top