Совместное использование jar-файлов с открытым исходным кодом (Spring / Spring Security / Hibernate / etc) в веб-приложениях - PullRequest
4 голосов
/ 21 ноября 2011

У нас есть несколько приложений Java EE, основанных на средах с открытым исходным кодом, таких как упомянутые выше. WEB-INF / lib для каждого приложения имеет следующие общие файлы:

antlr-2.7.6.jar*
aopalliance-1.0.jar*
asm-3.3.1.jar*
aspectjrt-1.6.8.jar*
aspectjweaver-1.6.8.jar*
cglib-2.2.jar*
commons-beanutils-1.8.3.jar*
commons-collections-3.1.jar*
commons-dbcp-1.4.jar*
commons-digester-2.1.jar*
commons-fileupload-1.1.1.jar*
commons-io-2.0.1.jar*
commons-logging-1.1.1.jar*
commons-pool-1.5.6.jar*
dom4j-1.6.1.jar*
hibernate-jpa-2.0-api-1.0.0.Final.jar*
hibernate-tools.jar*
hibernate-validator-4.1.0.Final.jar*
hibernate3.jar*
jackson-all-1.7.5.jar*
javassist-3.12.0.GA.jar*
javax.inject.jar*
log4j-1.2.16.jar*
org.springframework.aop-3.0.5.RELEASE.jar*
org.springframework.asm-3.0.5.RELEASE.jar*
org.springframework.beans-3.0.5.RELEASE.jar*
org.springframework.context-3.0.5.RELEASE.jar*
org.springframework.context.support-3.0.5.RELEASE.jar*
org.springframework.core-3.0.5.RELEASE.jar*
org.springframework.expression-3.0.5.RELEASE.jar*
org.springframework.jdbc-3.0.5.RELEASE.jar*
org.springframework.orm-3.0.5.RELEASE.jar*
org.springframework.transaction-3.0.5.RELEASE.jar*
org.springframework.web-3.0.5.RELEASE.jar*
org.springframework.web.servlet-3.0.5.RELEASE.jar*
poi-3.7-20101029.jar*
slf4j-api-1.6.1.jar*
slf4j-ext-1.6.1.jar*
slf4j-log4j12-1.6.1.jar*
spring-security-acl-3.0.5.RELEASE.jar*
spring-security-aspects-3.0.5.RELEASE.jar*
spring-security-config-3.0.5.RELEASE.jar*
spring-security-core-3.0.5.RELEASE.jar*
spring-security-taglibs-3.0.5.RELEASE.jar*
spring-security-web-3.0.5.RELEASE.jar*
testng-6.0.1.jar*
tiles-api-2.2.2.jar*
tiles-core-2.2.2.jar*
tiles-jsp-2.2.2.jar*
tiles-servlet-2.2.2.jar*
tiles-template-2.2.2.jar*
validation-api-1.0.0.GA.jar*

Мы сталкиваемся с постоянными ошибками при развертывании, каждая война занимает не более 20 МБ, при этом основная масса файлов сторонних производителей.

Поскольку все приложения имеют одинаковую версию для всех проектов с открытым исходным кодом, мне интересно, будет ли это нормально, если я переместу Spring, Spring Security, Spring Tiles, Hibernate, связанные с Hibernate сторонние фляги (cglib, antlr, и т.д.), ведение журнала и apache-commons. * в папке TOMCAT / lib.

Я помню со времен Struts (2003 или 2004), что каждое веб-приложение должно было иметь свою собственную копию jar-файлов Struts, и совместное использование на уровне сервера приложений не поощрялось. Применимо ли какое-либо подобное уныние (кроме версий)?

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

Буду признателен за любую помощь. Спасибо.

1 Ответ

3 голосов
/ 21 ноября 2011

В зависимости от того, как вы загружаете свое приложение, вы, вероятно, могли бы переместить большинство (или все) из этих jar-файлов (проверить и выяснить).С чем нужно быть осторожным, так это с фреймворками, которые полагаются на загрузку из статических инициализаторов.Если я правильно помню, Struts настроил себя из статического инициализатора, который прочитал файл struts-config.Поскольку статический инициализатор запускается только при первой загрузке класса, он не будет хорошо работать в совместно используемых загрузчиках классов.

Более конкретно, ваша проблема может не закончиться простым перемещением jar-файлов в общий загрузчик.Spring и Hibernate создадут множество динамических классов во время выполнения для сущностей и прокси-серверов AOP (для поддержки транзакций и т. Д.), Которые будут находиться в постоянном поколении.Обычно для приложений, работающих в Spring и Hibernate, вам придется увеличить пространство permgen (например, с помощью параметра -XX:MaxPermSize на Oracle HotSpot VM).

...