Ищем OSGi Design-Pattern - PullRequest
       2

Ищем OSGi Design-Pattern

0 голосов
/ 03 августа 2011

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

Сначала я подумал о том, чтобы поместить каждый источник в отдельный пакет, создать для них суперинтерфейс и позволить им предоставлять декларативный сервис. Это также поможет модульному реестру, который требуется, так как он доступен не на каждой ОС. Когда у службы конфигурации запрашивают значение свойства, он запрашивает все исходные пакеты в соответствии с шаблоном доски и считывает конфигурацию, пока он не получит ненулевое значение. Но это происходит в случайном порядке.

У кого-нибудь есть идеи, как реализовать специальный порядок обхода пакетов, предоставляющих сервис конфигурации?

С наилучшими пожеланиями

Ответы [ 2 ]

1 голос
/ 04 августа 2011

OSGi уже имеет концепцию ранжирования услуг. При регистрации службы вы можете указать значение для свойства "service.ranking" (org.osgi.framework.Constants.SERVICE_RANKING).

Я не думаю, что это свойство влияет на порядок, в котором BundleContext # getServiceReferences () возвращает доступные ссылки на сервисы (по крайней мере, спецификация ничего об этом не говорит), но вы все равно можете использовать значение свойства заказать внутреннюю коллекцию, управляемую вашей "супер" службой конфигурации.

Однако для меня, как правило, странная идея позволить самой реализации сервиса определить ее относительную важность. Я бы лучше разделил проблему на две части.

  1. Служба конфигурации, выполняющая роль фасада для
  2. коллекция поставщиков исходного кода конфигурации

Второй интерфейс будет включать некоторую концепцию определения характеристик (например, enum {file, registry, net}). Тогда я бы попросил реализацию первого интерфейса (фасад) выполнить упорядочение на основе характеристик каждого провайдера (как уже предлагает первый ответ Криса).

1 голос
/ 03 августа 2011

В общем, если вам нужен особый порядок обхода для группы объектов, вы просто определяете (частичный) порядок между вашими объектами.Затем вы сортируете полученные объекты и просматриваете этот список.

Итак, для вашей проблемы, когда требуется значение свойства, вы находите все источники, вы сортируете их в списке и, наконец, выполняете итерацию.хотя это.

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