Спецификация OSGi описывает формат WAB (Web Archive Bundle).
и Pax Web предлагает отличную поддержку веб-приложений WAB / WAR (PAX Web отлично работает на Equinox, Felix и т. Д.)
Используя pax web, вы получаете BundleContext через ServletContext, например:
BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext");
Для пользовательской возможности подключения, о которой вы упомянули, я предложил вам предоставить некоторые сервисные интерфейсы для реализации пакетов плагинов, и в вашем веб-приложении используйте ServiceTracker для прослушивания их регистрации (если вы не используете Декларативные услуги). Вы также легко сможете установить пакеты из сервлета загрузки.
Я предполагаю, что пользователи, загружающие плагины, должны будут войти в систему и авторизоваться, поэтому на этом этапе проблемы безопасности будут встречаться.
РЕДАКТИРОВАТЬ: ответ на комментарий здесь, поскольку недостаточно места в поле для комментариев
Извините, подумайте, что я неверно истолковал ваш вопрос - у вас есть контейнер (ы) веб-приложений, и вы хотите развернуть WAR с функциональностью OSGi? Если это так, то либо используйте ServletBridge, как уже упоминали другие, либо внедрите каркас OSGi в вашу WAR (это относительно просто, см., Например, this ).
Вы могли бы даже сделать это необязательным, пытаясь получить BundleContext от ServletContext и, если он возвращает null, запустить собственный встроенный фреймворк. Таким образом, он будет работать в собственном контейнере OSGi (например, Glassfish) или на сервере приложений Java EE.
В противном случае PaxWeb представляет собой реализацию спецификаций OSGi HttpService и WebApp, но с множеством расширений, облегчающих жизнь - но вы развертываете это в контейнере OSGi.