Рекомендации по совместному использованию кода веб-уровня (контроллеры и JSP) между похожими веб-приложениями

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

Проекты переписываются с использованием Maven, Spring MVC и Sitemesh.

Код уровня модели достаточно легко передать с помощью файлов JAR. Но я не знаю хороших способов совместного использования общего кода веб-уровня (JSP и контроллеров) между похожими приложениями.

Вот предыстория. Эти приложения являются интернет-магазинами. Один из них — обычный магазин (например, amazon.com), в который пользователь может войти, найти товары, добавить в корзину и оформить заказ. Другой в основном то же самое, только это сайт для перфорации. Части просмотра продукта и корзины покупок идентичны. Вход и проверка, однако, совершенно разные.

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

Я не думаю, что можно просто запустить один и тот же файл WAR в качестве «режима» на основе переменной среды или настроек из другой базы данных. Одно из отличий — совершенно другая конфигурация Spring Security.Также было бы предпочтительнее оставить контроллеры входа и проверки другого сайта вне сканирования компонентов, чтобы никто не мог каким-то образом перейти на неправильный сайт с помощью манипулирования URL.

Первоначально я начал использовать профили Maven и фильтрацию, чтобы сохранить два разных набора конфигураций (web.xml, конфигурации spring и т. д.) в одном проекте WAR. В зависимости от того, какой профиль Maven выбран, результирующий файл WAR строится с другим набором конфигураций (и другим именем для ясности). Это нарушает принцип Maven, согласно которому один pom создает один артефакт.

Есть ли лучший способ сделать это? А как насчет оверлеев Maven WAR? Я вижу, как люди говорят об использовании оверлеев для обмена общими ресурсами, такими как CSS, JS, изображения и даже некоторые распространенные JSP. Но я не вижу, чтобы кто-то упоминал о совместном использовании классов, таких как контроллеры, таким образом.

Я мог бы перенести классы контроллеров в JAR-файлы, но логически кажется, что они должны оставаться в соответствующих JSP-файлах. И JSP также нельзя перенести в JAR (правильно?).

Я также подумал о том, чтобы сделать его EAR-файлом, содержащим несколько файлов WAR — один WAR для обычных покупок, а другой — для соответствующего входа и оформления заказа. Я считаю, что сеанс может быть разделен между двумя WAR в одном и том же EAR, но я не уверен, хорошо ли он работает с bean-компонентами области сеанса Spring. Я слышал, что они на самом деле не хранятся в сеансе. Я также должен был бы выяснить, что делать с декораторами Sitemesh, используемыми для верхнего/нижнего колонтитула.Одну и ту же конфигурацию Sitemesh и ее ресурсы нужно будет скопировать в обе WAR, верно? Так что, в конце концов, артефакт ВОЙНЫ за покупками все равно будет отличаться в каждом случае.

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

10
задан KevinF 7 March 2012 в 06:26
поделиться