Я уверен, что пойму разницу, когда начну делать больше вещей, связанных с OSGi, но я подумал, что это хороший вопрос, поскольку я не понял его из пары быстрых поисков в Google. Если у кого есть четкий и лаконичный ответ...
В чем разница между Равноденствием и Девой?
Ответы (2)
Неточная аналогия: Равноденствие — двигатель, Дева — автомобиль.
Equinox — это среда выполнения из проекта Eclipse (альтернативные реализации включают Felix (от Apache) и Knopflerfish).
Virgo использует Equinox по своей сути, но предоставляет многие вещи, которые потребуются при использовании его в производственной среде. Virgo — это, по сути, проект SpringSource dm Server, переданный в дар Eclipse Foundation, поэтому он явно поддерживает все, что связано с Spring. Существует множество подобных продуктов (Karaf (ServiceMix), а также многочисленные серверы приложений Java EE).
Среда выполнения OSGi обычно представляет собой очень маленькую среду (среду выполнения), которой достаточно для запуска/предоставления среды OSGi. Такие продукты, как Virgo, предлагают общие производственные/предпринимательские функции согласованным и проверенным образом и часто включают в себя удаленный доступ к оболочке, поддержку веб-приложений, безопасность и т. д.
Вы можете работать со средой выполнения напрямую, добавляя каждую функцию по мере необходимости, но, хотя это может быть полезно для систем с ограниченными ресурсами, обычно это требует больших усилий за небольшое вознаграждение (кроме обучения, конечно).
Технически Equinox — это OSGi Framework, а Virgo — контейнер. Контейнер работает поверх фреймворка и добавляет функциональность. Конкурирующими технологиями для этого являются Felix и Karaf, которые представляют собой OSGi-фреймворк Apache Software Foundation (Felix) и контейнер (Karaf). Разница между предложением ASF и базовым предложением Eclipse заключается главным образом в том, что предложения Eclipse являются эталонной реализацией спецификации OSGI 4.2.
Эталонная реализация «подсистем» Virgo действительно является значительным улучшением для скоординированного развертывания наборов пакетов. В Karaf они используют механизм развертывания «функций». Основное различие между механизмом развертывания «подсистем» и «функций» заключается в том, что в подсистемах вы можете разделить определенные наборы библиотек и предотвратить использование их пакетов за пределами определенной подсистемы. Благодаря функциям все пакеты, доступные для других библиотек, становятся доступными для всего контейнера.