Я имею в виду интеллектуальную систему, которая может выбирать между доступными службами OSGi динамически. То есть, выберите реализацию или другую в зависимости от некоторого параметра времени выполнения. Например, сообщите об этом алгоритму, который изменит оператор после нескольких итераций или в зависимости от балансировки нагрузки в системе или любого другого.Как выбрать в среде выполнения нескольких сервисов OSGi интеллектуальным способом?
while(stopCriterion){
operator.doSomething(); //There exist many operator implementations
}
Мой первый подход заключается в использовании DS разоблачить услуг и связывать услуги с 0..n и динамической политики. Затем из внешнего компонента уведомляет алгоритм, который использует сервис на каждой итерации (используя EventAdmin, может быть?).
operator[selected].doSomething();
Это может помочь мне уменьшить сложность, когда многие эксперименты с множеством различных реализаций служб должны выполняться. Кроме того, я планирую использовать спецификацию удаленных служб с помощью Eclipse Communication Framework, чтобы проводить исследования в распределенных алгоритмах и в этом случае, так что может быть возможно динамическое появление новых реализаций во время выполнения.
Однако я не знаю, является ли это хорошая идея или существует еще один лучший механизм для динамического выбора того, какую реализацию использовать. Я думаю, что использование ServiceTracker вместо DS не является хорошим вариантом, но я открыт для предложений :)
Заранее спасибо.
Привет Энди. Мне нравится ваша идея о промежуточном селекторном сервисе для выбора соответствующего экземпляра :) Однако разработчики «Operators» и «Algorithms», вероятно, не знакомы с OSGi, и я думаю, что Selector может их смутить. Во всяком случае, я нашел ваш комментарий элегантной формой для решения моей проблемы. Если никто не даст мне другого решения, я помету ваш ответ как «проверенный» (это мой первый вопрос в StackOverflow, я не знаю, могу ли я проверить больше, чем ответить или изменить свой выбор). –
Нет необходимости, чтобы операторы-разработчики много знали о OSGi, поскольку они просто реализуют правильный интерфейс. Что касается принятия ответа: я не думаю, что вы можете пересмотреть свой выбор, поэтому выбирайте разумно. (Или посмотрите [faq] (http://stackoverflow.com/faq) для получения дополнительных указаний.) –
Спасибо Angelo (не Энди!). Ваша идея классная, потому что селектор также может связывать другие сервисы, которые «Алгоритм» использует для извлечения информации :) (я не могу повысить ваш ответ, но мне нужна большая репутация). –