【发布时间】:2012-01-03 02:02:14
【问题描述】:
我们有一堆基于上述开源框架的 Java EE 应用程序。每个应用程序的 WEB-INF/lib 都有以下常用 jar:
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*
我们在部署时遇到 permgen 错误,每场战争只有 20 MB,其中大部分是 3rd 方 jar。
由于所有开源项目的所有应用程序都在同一个版本上,我想知道如果我移动 Spring、Spring Security、Spring Tiles、Hibernate、Hibernate 相关的 3rd 方 jar(cglib、antlr、等),记录和 apache-commons.* 到 TOMCAT/lib 文件夹。
我记得从 Struts 时代(2003 年或 2004 年)开始,每个 web 应用程序都应该拥有自己的 struts jar 副本,并且不鼓励在应用程序服务器级别共享。是否有任何此类劝阻(版本控制除外)?
作为一个辅助问题:是否有一个通用规则可以遵循哪些 3rd 方 jar 可以共享或不能共享(如果文档中没有明确提及?
我将不胜感激。 谢谢。
【问题讨论】:
-
log4j肯定应该进入每个 WAR,如果您也为每个 WAR 打包log4g.properties(例如,您为每个 Web 应用程序有单独的日志文件)。否则(如果您有应用服务器范围的log4g.properties),您可以将log4j放入应用服务器libs/。请注意,如果其中一个框架中存在内存泄漏(例如通过静态变量),它将影响整个应用服务器。 -
关于内存泄漏的要点。
标签: hibernate spring jakarta-ee tomcat classloader