Я работаю над переписыванием некоторых устаревших веб-приложений.В частности, есть два, которые очень, очень похожи, но сегодня не имеют общего кода, и я собираюсь это исправить.
Проекты переписываются с помощью Maven, Spring MVC и Sitemesh.
Код уровня модели достаточно легко распространить с помощью JAR.Но я не знаю каких-либо хороших способов совместного использования общего кода веб-уровня (JSP и контроллеров) между похожими приложениями.
Вот некоторые предпосылки.Эти приложения интернет-магазины.Одним из них является обычный магазин (например, amazon.com), в который пользователь может войти, выполнить поиск товаров, добавить его в корзину и оформить заказ.Другое - это в основном то же самое, только это сайт с комментариями.Обзор товара и корзины покупок идентичны.Вход и выход, однако, совершенно разные.
Я упрощаю, но этого достаточно, чтобы проиллюстрировать проблему.В разделах обзора продукта и корзины покупок содержится значительная часть кода веб-уровня, который должен быть доступен для всех.
Я не думаю, что можно просто запустить тот же WAR-файл, что илибо «режим», основанный на переменной среды, либо на настройках из другой базы данных.Одно из отличий - это совершенно другая конфигурация Spring Security.Также было бы предпочтительнее оставить контроллеры входа и извлечения другого сайта вне проверки компонентов, чтобы никто не мог каким-то образом перейти на неправильный с помощью URL-манипуляции.
Я изначально начал использовать профили Maven и фильтрациюхранить два разных набора настроек (web.xml, весенние конфигурации и т. д.) в одном и том же проекте WAR.В зависимости от того, какой профиль Maven выбран, результирующая WAR создается с другим набором настроек (и для ясности с другим именем).Это нарушает принцип Maven, что один пом производит один артефакт.
Есть ли лучший способ сделать это?Как насчет Maven WAR Overlays?Я вижу людей, говорящих об использовании оверлеев для совместного использования общих ресурсов, таких как CSS, JS, изображения и даже некоторые распространенные JSP.Но я не вижу, чтобы кто-то упоминал о таких классах совместного использования, как Controllers.
Я мог бы перенести классы Controller в JAR, но логически кажется, что они должны остаться со своими соответствующими JSP.И JSP также не могут быть перенесены в JAR (верно?).
Я также думал о том, чтобы сделать его EAR, содержащим несколько файлов WAR - один WAR для обычного шоппинга и другой WAR длясоответствующая регистрация и оформление заказа.Я полагаю, что сеанс может быть разделен между двумя WAR-ами в одном EAR-файле, но я не уверен, что он хорошо работает с bean-компонентами Spring.Я слышал, что они не хранятся в сессии.Я также должен был бы выяснить, что делать с декораторами Sitemesh, используемыми для верхнего / нижнего колонтитула.Одна и та же конфигурация Sitemesh и ее ресурсы должны быть скопированы в обе WAR-ы, верно?Таким образом, в конце концов, артефакт WAR для покупки все равно будет отличаться в каждом случае.
Я должен поверить, что другие люди уже имели дело с этим раньше.Я думаю об этом неправильно?Есть ли общее решение для такого рода вещей?