Структура платформы бизнес-веб-приложений

Я хотел бы разработать веб-приложение на Java/Spring/Hibernate, выступающее в качестве бизнес-платформы, к которой я мог бы подключать плагины (например, плагин CRM, плагин для продуктов, плагин для продаж). Эти плагины могут зависеть от других плагинов в виде дерева. Родительский проект будет упакован как war со всей базовой конфигурацией и внешним видом (конфигурации Spring, CSS, скрипты), готовым управлением пользователями и группами, настройками безопасности и т. д.

В целом, я хотел бы, чтобы он вел себя и выглядел немного как Joomla, но создавался с использованием разных инструментов для разных целей. И у меня есть несколько вопросов по этому проекту:

  1. Знаете ли вы какие-либо проекты с открытым исходным кодом, предлагающие такую ​​готовую платформу?
  2. Если нет, применим ли Maven для управления этими плагинами?
  3. Как лучше всего упаковать и развернуть эти плагины?

И последнее, но не менее важное: правильный ли это путь или это тупиковый путь? Не лучше ли создать отдельное веб-приложение для этих нужд бизнеса?


person Wojtek Owczarczyk    schedule 05.03.2011    source источник


Ответы (4)


Существует множество способов создания модулей плагинов. Некоторые идеи:

Вы можете упаковать каждый модуль плагина в виде jar-файла и в корне пути к классам этого jar-файла поместить файл конфигурации spring с конфигурацией bean-компонентов, поэтому, если вы используете определенный плагин. Вы можете «включить» bean-компоненты этого пакета в веб-приложении, просто добавив этот файл в параметр contextConfigLocation в файле web.xml:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:module1.xml
        classpath:module2.xml
        classpath:module3.xml
        classpath:module4.xml
    </param-value>
</context-param>

Таким образом, вы можете использовать эти компоненты в своем веб-приложении. Другой способ сделать это - использовать подход, основанный на аннотациях. Или вы можете смешивать методы.

Некоторое время назад я разработал способ автоматического горячего обнаружения (во время выполнения, без перезапуска приложения) плагинов в настольном приложении путем обнаружения всех реализаций определенного абстрактного класса (контракта) в пути к классам. Итак, все, что мне нужно было сделать для создания нового плагина, это реализовать этот «контракт». Для этого я использовал некоторые вкусности "classloader".

Говоря о «модулях», возможно, вы хотели бы увидеть что-нибудь об OSGi.

Ну... это некоторые идеи. Я надеюсь, что это поможет в любом случае. ;-)

person Iogui    schedule 05.03.2011
comment
Да, я думаю, я пойду с этим подходом. Всем спасибо за ответы - person Wojtek Owczarczyk; 07.03.2011

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

Теперь о том, как это сделать. «Плагины» — очень расплывчатое понятие. я использовал плагины

  • перехватывать вызовы методов
  • для запуска фоновых процессов
  • добавить дополнительные представления в мое веб-приложение

Теперь вопрос в том, как это работает. Перехватчик метода работает с использованием org.aopalliance.intercept.MethodInterceptor. Фоновые процессоры используют TimerTask. Дополнительные представления в веб-приложении используют маршрутизацию Spring MVC.

Мои плагины упакованы как JAR-файлы и обнаруживаются во время запуска приложения как контексты приложения Spring.

Это все очень общее, но может дать вам некоторые идеи, чтобы пойти дальше.

person three-cups    schedule 05.03.2011

Знаете ли вы какие-либо проекты с открытым исходным кодом, предлагающие такую ​​готовую платформу?

Взгляните на Spring Roo

Если нет, применим ли maven для управления этими плагинами?

Да, это. Узнайте, как его использует AppFuse.

Как лучше всего упаковать и развернуть эти плагины? Опять же, проверьте, как это делает Spring ROO или AppFuse.

Надеюсь, это поможет.

person Nilesh    schedule 07.03.2011

*

И последнее, но не менее важное: правильный ли это путь или это тупиковый путь? Не лучше ли создать отдельное веб-приложение для этих нужд бизнеса?

*

У меня есть негативный опыт модуляризации областей с помощью JPA. Например, @Entity Customer включен в модуль CRM, но активно используется другими. Первую естественную идею один модуль = собственный блок сохраняемости очень трудно реализовать, JPA должен быть между модулями, а идея модуляризации зашла в тупик, модули не разделены.

Я использую вид модуляризации "в процессе и в JAR", вид структур построен, некоторые меню/сущности и т. д. принадлежат "модулям" в более легком смысле.

person Jacek Cz    schedule 07.09.2015