Переупаковка нескольких WAR в один EAR

Я работаю над проектом, в котором есть несколько веб-приложений (WAR), созданных с помощью Maven и развернутых в Java EE.

Эти WAR разделяют несколько общих бизнес-файлов JAR (например, один, содержащий объекты домена, которые загружаются из спящего режима) и другие файлы JAR фреймворка, такие как Spring и Hibernate.

Они используют Spring MVC, а контекст приложения загружает Hibernate. Поскольку каждая WAR имеет свой собственный путь к классам в контейнере сервлетов, кеш Hibernate (EHcache) не используется совместно.

Я бы хотел поделиться кешем, а также bean-компонентом сеанса hibernate (а также другими обычными bean-компонентами) между различными WAR. Я думаю, что это возможно, переупаковав эти WAR внутри EAR, и тогда мне пришлось бы создать XML-конфигурацию Spring, используя эти общие bean-компоненты, а в WAR Spring XML использовать что-то вроде SingletonBeanFactoryLocator из того, что я читал.

Я спрашиваю здесь, есть ли простой способ сделать это, минимизируя изменения в POM WAR.

Примечание. Я знаком с WAR, tomcat и сервлетами, но не очень хорошо знаком с EAR.

Заранее спасибо.


person Luciano    schedule 22.02.2010    source источник
comment
Это можно сделать, но только на определенных серверах приложений. Какой сервер вы используете?   -  person skaffman    schedule 23.02.2010
comment
Jboss 4.0.5 (возможно, немного устарел, но пока не могу его изменить)   -  person Luciano    schedule 23.02.2010
comment
Я упомянул tomcat, потому что он находится на наших машинах для разработки (используется через eclipse). Но у нас также установлен jboss на случай, если в тестовой или производственной среде возникнет проблема.   -  person Luciano    schedule 23.02.2010


Ответы (3)


Хммм ... Большинство контейнеров Java EE используют изолированные загрузчики классов для WAR, даже в EAR (даже если спецификация Java EE не требует изоляции загрузки классов среди модулей одного EAR), поэтому я бы не стал ожидать многого от упаковки EAR, особенно если вы хотите, чтобы ваше приложение оставалось переносимым (т. е. если вы не хотите полагаться на какое-либо специфическое поведение сервера приложений).

Теперь, если действительно имеет смысл разделить фабрику сеансов и кеш 2-го уровня между несколькими приложениями, возможно, рассмотрите возможность объединения их в одну WAR. Это был бы самый простой способ, ИМО. Но я бы хотел спросить почему тогда они разделены? Когда приложения разделены, у них в большинстве случаев есть отдельное управление, и я не знаю, будет ли их совместное развертывание хорошей идеей в таком случае.

И если объединение WAR невозможно, сообщите нам, какой контейнер вы используете.

person Pascal Thivent    schedule 22.02.2010
comment
Я не уверен, почему они разделены. Так было до того, как я начал там работать, и впервые увидел это. Мне сказали, что на случай, если когда-нибудь они решат поставить войну на разных серверах. Но я не думаю, что это произойдет в обозримом будущем, и теперь мы более активно используем спящий режим и просто беспокоились о проблемах с памятью (конечно, я должен сначала профилировать). Мы используем Jboss 4.0.5 - person Luciano; 23.02.2010
comment
@Luciano. Если они используют одну и ту же модель предметной области, если у них одинаковый жизненный цикл, это имело бы смысл (и вы действительно сэкономите немного памяти). В этом случае я бы посмотрел, возможно ли их объединение (даже на уровне кода, если это возможно, вы находитесь в типичной ситуации YAGNI). Я обновлю свой ответ, чтобы охватить случай JBoss. - person Pascal Thivent; 23.02.2010

Думали ли вы об использовании когерентного кластерного кэша L2? Если вы используете несколько серверов приложений, вы можете увидеть больше преимуществ, поскольку все они будут использовать один и тот же согласованный кеш.

person tddmonkey    schedule 26.01.2011
comment
Ну, не говоря уже о том, что я там больше не работаю. Это был всего лишь один сервер приложений; нет кластеризации. - person Luciano; 28.01.2011

Использование общего контекста родительского приложения в приложении Multi-War Spring

http://blog.springsource.org/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/

person Turbokiwi    schedule 30.08.2013