Стратегии управления несколькими веб-приложениями, развернутыми в веб-контейнере Java J2EE - PullRequest
0 голосов
/ 01 августа 2011

У меня есть несколько войн (5+), развернутых в веб-контейнере tomcat, как показано ниже:

war1
 +-META-INF
 +-WEB-INF
       +-classes
         +-MyClass1.class
       +-libs
         +-log4j.jar
         +-spring.jar
war2
 +-META-INF
 +-WEB-INF
       +-classes
         +-MyClass2.class
       +-libs
         +-log4j.jar
         +-spring.jar

Как вы можете видеть, в библиотеках, используемых веб-приложениями, есть совпадение.Получу ли я что-нибудь, объединив свои различные приложения в одно монолитное приложение и развернув его, как показано ниже?

war3
 +-META-INF
 +-WEB-INF
       +-classes
         +-MyClass1.class
         +-MyClass2.class
       +-libs
         +-log4j.jar
         +-spring.jar

Я обеспокоен тем, что требования к памяти моего контейнера по первой схеме неоптимальны, так как log4j.jar иspring.jar загружаются дважды, хотя они абсолютно одинаковых версий.Я действительно не знаю, как работают веб-контейнеры - возможно, веб-контейнер (Tomcat) достаточно умен, чтобы не загружать библиотеки дважды.

Ответы [ 2 ]

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

Обратитесь к https://sec1.woopra.com/docs/class-loader-howto.html за информацией о том, как работают загрузчики классов tomcat.

В вашей текущей структуре классы будут загружаться отдельными загрузчиками классов, специфичными для каждого веб-приложения, и, если это касается вас, вы можете изменить свой макет, чтобы размещать общие классы отдельно. Но единственное, что меня беспокоит, это то, что это ограничивает гибкость ваших индивидуальных приложений. Если вы хотите обновить одно приложение с Spring 2.5 до 3.0, а не другое, вы не сможете этого сделать, если файлы будут общими.

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

0 голосов
/ 01 августа 2011

Если вас беспокоит память, поместите свои библиотеки в $ CATALINA_BASE / lib, это путь к классу общего сервера. Если ваши приложения семантически похожи, я бы слился. В противном случае я бы никогда не поместил библиотеку webapp в путь к классу сервера. Это явное нарушение, если разделение интересов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...