Как мне разработать систему плагинов в многоуровневом приложении Java EE? - PullRequest
3 голосов
/ 20 августа 2011

У меня есть приложение REST API на основе Java EE.Он имеет многоуровневую архитектуру, подобную следующей:

  1. Ресурсы (ресурсы Jax-rs)
    • Проверка объекта
    • Отображение объектов
  2. Сервисный уровень
  3. Уровень репозитория
  4. Объекты JPA

Все подключено с помощью внедрения зависимости Spring.

Мне нужно спроектировать это ядроприложение таким образом, что оно позволяет другим внешним разработчикам писать расширения / плагины и переопределять или расширять любые второстепенные или основные функции в ядре.Думайте об этом как Wordpress CMS в Java EE, если это поможет.Как бы вы спроектировали систему плагинов на основе текущей архитектуры?

Один очевидный способ, который я могу придумать, - это переопределить или добавить новые функциональные возможности к надлежащему ресурсу (с проверкой, объектным сопоставителем), сервису, репозиторию и сущности и создатьбаночка + XML из этого.Но я хочу убедиться, что разработчик плагина должен написать абсолютно минимальный объем кода, чтобы новая функциональность работала, и в то же время повторно использовать основной код.

Предположим, вы хотите создать блог-пост в Wordpress.расширение, позволяющее создавать сообщения в блоге с несколькими дополнительными полями, которые еще не существуют в ядре.Какой самый простой и понятный способ разработать текущее приложение Java EE, чтобы он был легким для разработчиков плагинов / расширений?Какие-нибудь шаблоны, которые могут быть полезны, такие как шаблон стратегии или шаблонный метод?

Существуют ли Java CMS с открытым исходным кодом, которые следуют модели, используя Spring / JPA и стандартные технологии?

1 Ответ

1 голос
/ 20 августа 2011

Я думаю, вы хотите расширить функциональность, а не переопределять ядро. Типичные примеры архитектуры определяют проблемы, которые могут быть переопределены (отдельно от ядра), и предусматривают. Платформа Eclipse достигает этого, используя комбинацию плагинов-расширений и механизмов точек расширения. Это делается с использованием комплектации OSGI.

Другой альтернативой является разбиение приложения на более мелкие независимые модули / сервисы. Все, что вам нужно сделать, это разместить эти модули через ESB / Application Integrator (например, Mule / Spring Integration) и позволить пользователям настраивать свою версию маршрутизации / преобразования. Расширение будет означать создание новых преобразователей, которые добавляются в поток сообщений.

...