У меня есть веб-приложение, работающее в контейнере сервлетов (Tomcat). Мой план состоит в том, чтобы использовать горячую вилку для добавления и удаления дополнительных модулей в веб-приложение. Эти дополнительные модули содержат только некоторую бизнес-логику, но не какие-либо связанные с сетью вещи, такие как сервлеты, страницы JSP или файлы HTML.
Каков наилучший способ сделать это?
Я думал о переключении с Tomcat на Glassfish, чтобы использовать OSGi. Я также подумал об использовании Apache Felix с Tomcat.
Каковы альтернативы?
OSGi определенно является правильной технологией, если вы хотите создать модульное приложение, которое можно быстро обновлять без простоя.
У вас есть несколько вариантов:
Вы можете начать с контейнера OSGi, такого как Apache Felix, и развернуть пакеты в этом контейнере как для своего приложения, так и для веб-сервера (большинство из них основаны на Jetty). Таким образом, все является пакетом и может быть обновлено при необходимости. Если вы начинаете с нуля и не имеете ограничений на существующие контейнеры сервлетов, которые вы должны использовать, это путь.
Если вам нужно продолжать работать с существующим контейнером сервлетов, вы можете развернуть WAR, который внедряет контейнер OSGi, а контейнер OSGi загрузит все пакеты, составляющие ваше приложение. В этом случае вы можете развернуть специальный "мост", который будет регистрировать сервлеты и фильтры с контейнером сервлетов "хозяин".
Начиная с Glassfish, это немного похоже на первый вариант, поскольку Glassfish сам построен на Felix. Вы просто получаете множество "дополнительных" пакетов, предварительно установленных в вашем приложении. Если вы все равно используете 80%, это, вероятно, стоит того. Если вы вряд ли используете какие-либо функции Glassfish (JavaEE) в своем приложении, вам, вероятно, лучше начать с Felix и выбрать компоненты там.