我使用 Tomcat 托管我的Java Web和Web Service应用程序已经很长时间了。目前主要用于 Spring 和 Grails 应用程序。
最近在一个项目中,出现了关于如何在Tomcat生产环境中处理依赖项/库的讨论:
在我的项目中,我正在部署 大型WAR文件, 该 文件 包含WEB-INF / lib文件夹中应用程序的所有必需依赖项。我放入tomcat / lib文件夹中的唯一东西是由tomcat管理的JDBC连接的JAR文件。
客户在WebSphere方面拥有悠久的历史,并认为该容器应包含大多数必需的依赖项。因此,他们希望将tomcat / lib文件夹中的已使用框架或WebService API的JAR文件(如Metro)放入其中,并拥有 瘦的WAR文件 。
我认为该解决方案的问题在于,如果您的应用程序需要tomcat / lib文件夹中已经包含的依赖关系的另一个版本,则可能会出现错误和奇怪的行为。
是否有一些有关此问题的最佳实践或正式文件?您对此有何看法?
是否有一些有关此问题的最佳实践或正式文件?
我怀疑您会找到官方文档(来自Tomcat开发人员/社区)来支持这种理论,尽管它是非常有效的。我必须在上一份工作中准备一个,以便可以跨多个J2EE容器部署应用程序的EAR文件。
有一件赞成的事情。您可以调出标题为“ WebSphere Application Server V6.1:类加载器问题确定”的IBM红皮书(已过时,考虑到WAS 7可用),它演示了如何在WebSphere中创建共享库。在WebSphere上,可以为需要不同版本的应用程序创建多个此类库。在Tomcat上,由于所有共享库都被转储到$ CATALINA_HOME \ lib中,因此您可能不知道什么是类加载器,而是由管理员来摆布。
红皮书还提供了一些建议(用实用程序JAR替换实用程序文件,您就会得到答案):
不应放置实用程序文件的位置 在确定最佳位置放置实用程序文件时,重要的是要认识到这些文件不应包含在WebSphere Application Server的环境中。 例如:app_server_root / lib,app_server_root / lib,/ ext *,app_server_root / java(包括任何子目录)或JVM类路径。 将实用程序文件添加到这些目录中可能会导致WebSphere运行时环境出现问题,并可能导致意外结果,包括覆盖WebSphere类,这可能会损害服务器的整体功能。
不应放置实用程序文件的位置
在确定最佳位置放置实用程序文件时,重要的是要认识到这些文件不应包含在WebSphere Application Server的环境中。
例如:app_server_root / lib,app_server_root / lib,/ ext *,app_server_root / java(包括任何子目录)或JVM类路径。
将实用程序文件添加到这些目录中可能会导致WebSphere运行时环境出现问题,并可能导致意外结果,包括覆盖WebSphere类,这可能会损害服务器的整体功能。