Java Web-приложение "плагиновая" архитектура - программирование
Подтвердить что ты не робот

Java Web-приложение "плагиновая" архитектура

Пожалуйста, дайте совет, как сделать "плагиновую" архитектуру для веб-приложения Java.

В настоящее время мы используем довольно простой и стандартный Spring + Hibernate + Struts 2 в контейнере сервлетов Tomcat. (Построено с maven)

Мне нужно что-то вроде Redmine. Где любой модуль может быть включен/отключен, обновлен Redmine UI

Пожалуйста, исключите тяжелые варианты, такие как OSGi, Portlet.

  • OSGi слишком тяжелая, нет хорошего внедрения технологии для Интернета. Я уже смотрел на Eclipse Germini;
  • Portlet он просто старый и никогда не был популярен.
4b9b3361

Ответ 1

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

Важное замечание: очень просто определить некоторую точку расширения, разрешить и найти доступные реализации. Есть много доступных решений, например, хороший и простой - JSPF

Ресурсы являются основной проблемой для WEB-приложений

OSGi

OSGi, не так уж плохо и может быть полезным. Это кажется тяжелым (и некоторые реализации тяжелы), но это цена стандартизированной платформы. Я бы предложил проверить Apache Felix. Его можно использовать в "легком" режиме. Кстати, он включает в себя веб-консоль, которая создается как свободно связанное приложение на основе плагинов, может быть полезно:

enter image description here

Некоторые примеры Расширение веб-консоли Apache Felix

Веб-консоль может быть расширена путем регистрации службы OSGi для интерфейс javax.servlet.Servlet с свойством службы felix.webconsole.label установлен на метку (последний сегмент URL-адреса) страница. Соответствующая услуга называется плагином веб-консоли или плагин для краткости.

Вы также можете проверить eie-manager, который является чистым и простым и использует OSGi для управления плагинами. Может быть хорошим примером для вас.

Пользовательская инфраструктура плагинов

Я бы предложил рассмотреть решение Jenkins/Hudson. Я бы сказал, что подключаемая система Jenkins довольно зрелая и надежная. Может быть использован как хороший пример.

enter image description here

Также проверьте Архитектура Hudson Plugin

Простое решение

Для моего проекта я создал слой абстракции плагина на основе JSPF с пользовательским преобразователем зависимостей.

ПЛЮСЫ:

  • простой и маленький
  • чистая концепция
  • работает хорошо

МИНУСЫ:

  • без правильного управления плагином может быть медленным (полный поиск в classpath)
  • предоставляет очень простые функции.
  • может потребоваться дополнительное внимание

Я бы предложил использовать JSPF, только если вам действительно нужна простота и вы хотите контролировать все. JPF предоставляет множество интересных функций из коробки, например:

Плагины могут быть "горячими" и даже отменены во время исполнение приложения. Что еще, зарегистрированные плагины могут быть активируется и деактивируется "на лету", сводя к минимуму ресурс времени выполнения использование.

Проблема заключается в том, что JPF мертв.

Предложение

Проведите некоторое время с Apache Felix. Он достаточно зрелый, поэтому ваши инвестиции времени могут окупить много.

Ответ 2

Посмотрите ответы на этот вопрос: Лучший способ создания плагиновой системы с Java

Если вы не доверяете коду плагина, вы можете реализовать песочницу, как описано здесь: Песочница против вредоносного кода в приложении Java

Открытый проект Java Plug-in Framework поддерживает дезактивацию плагина, вы можете получить от него вдохновение, даже если оно слишком тяжелое для ваши цели.

Ответ 3

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