java - 将多个 WAR 重新打包到一个 EAR 中

标签 java spring maven-2 war ear

我正在开发一个项目,该项目有多个使用 Maven 构建并部署在 Java EE 中的 Web 应用程序 (WAR)。

这些 WAR 共享几个常见的业务 JAR(例如包含从 hibernate 加载的域对象的 JAR)以及其他框架 JAR(例如 Spring 和 Hibernate)。

他们使用 Spring MVC,应用程序上下文加载 Hibernate。由于每个 WAR 在 servlet 容器中都有自己的 Classpath,因此 Hibernate 缓存(EHcache)不共享。

我想要的是在不同的 WAR 之间共享缓存以及 hibernate session 工厂 bean(以及其他常见 bean)。我认为这可以通过将这些 WAR 重新打包到 EAR 中来实现,然后我必须使用这些公共(public) bean 制作一个 spring 配置 XML,并在 WAR 的 Spring XML 中使用我所读到的类似 SingletonBeanFactoryLocator 的内容。

我在这里问的是是否有一种简单的方法可以做到这一点,最大限度地减少对 WAR 的 POM 的更改

注意:我熟悉 WAR、tomcat 和 servlet,但不太熟悉 EAR。

提前致谢。

最佳答案

嗯...大多数 Java EE 容器都使用隔离的类加载器进行 WAR,即使是在 EAR 中(即使 Java EE 规范要求单个 EAR 模块之间的类加载隔离),所以我不会对 EAR 打包抱有太多期望,特别是如果您希望应用程序保持可移植性(即,如果您不想依赖任何应用程序服务器特定行为)。

现在,如果在多个应用程序之间共享 session 工厂和二级缓存确实有意义,则可以考虑将它们合并到单个 WAR 中。在我看来,这将是最简单的方法。但我很想问为什么它们是分开的?当应用程序是独立的时,它们在大多数情况下都有单独的治理,我不知道在这种情况下将它们部署在一起是否是一个好主意。

如果无法合并 WAR,请告诉我们您正在使用哪个容器。

关于java - 将多个 WAR 重新打包到一个 EAR 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311726/

相关文章:

java - 语法错误, 'for each' 语句仅在源级别为 1.5 或更高时可用

java - 选择计算动态查询的存储过程无法正常工作

java - 从 Maven POM 文件中读取属性文件

java - 为什么我收到错误 SQLException : [Microsoft][ODBC Excel Driver] Too few parameters. Expected 1

java.lang.IndexOutOfBoundsException : using try, 捕获

java - 更改类从 Java 扩展的内容

java - SQS 接收器 - Spring Boot

java - Spring Data JPA findOne() 改为 Optional 怎么用?

java - 在 tomcat 中部署模型项目的最佳方法是什么

java - 从 maven 程序集描述符中的 jars 中排除包