Динамически создавать и настраивать OSGi Services с зависимостями - PullRequest
1 голос
/ 18 июля 2010

В моем текущем приложении я хочу создавать и настраивать osgi-сервисы во время выполнения через пользовательский интерфейс. Я изучил спецификацию OSGi Metatype, но она поддерживает только атрибуты простого типа.

Итак, мои вопросы: есть ли веская причина, почему нет поддержки типов атрибутов, таких как другие службы osgi, и кто-нибудь знает о уже существующем проекте, который делает что-то подобное?

UPDATE

Для дальнейшего уточнения моего вопроса:

То, что я хочу сделать, - это создавать и настраивать новые службы в соответствии с потребностями пользователя программного обеспечения. Это должно даже работать, если в систему добавлены новые сервисные интерфейсы.

Предположим, у меня есть сервисный интерфейс для отправки уведомлений

public interface NotificationService {
    void notify(Notification n);
}

и реализация для отправки уведомлений, например, на Twitter. Через спецификацию Metatype я мог бы закодировать информацию о том, что сервису Твиттера нужны имя пользователя и пароль. Это позволяет мне динамически создавать пользовательский интерфейс во время выполнения для создания новых служб уведомлений Twitter.

Это работает с простыми типами данных, но спецификация Metatype не обрабатывает зависимости от других сервисов. Например. Допустим, у Notification есть вложение файла, и поэтому службе Twitter требуется служба FileUpload для хранения файлов.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Итак, в своем примере вы в основном говорите, что реализация службы может быть настроена и что эта конфигурация может указывать, что для реализации требуется другая служба.По сути, вы ищете систему, которая позволяет объявлять зависимости реализации в коде, а не в статическом XML-файле (как это делают декларативные службы и большинство других).

Решение вашей проблемыиспользовать диспетчер зависимостей Apache Felix.Он имеет декларативный Java API, который позволяет добавлять и удалять зависимости во время выполнения.Некоторые базовые примеры, с которых можно начать, можно найти здесь: http://felix.apache.org/site/apache-felix-dependency-manager-getting-started.html Я бы посоветовал вам построить 3.0.0-SNAPSHOT из исходного кода, поскольку это самый последний и самый лучший, довольно стабильный к настоящему моменту.

Если это поможет, я мог бы предоставить пример кода для примера, который вы описали выше.Дайте мне знать.

0 голосов
/ 22 июля 2010

Вы всегда можете добавить новые службы, используя BundleContext # registerService (), однако служба в то время должна быть инициализирована и готова к запуску. Может оказаться полезным новый сервис Blueprint из спецификации OSGi 4.2 или даже Dynamic Services, который более старый, но более распространенный.

В конце концов, это зависит от того, что вы хотите сделать. Когда вы говорите «создавать» и «настраивать» службы OSGI во время выполнения, что вы имеете в виду?

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