将多个 WAR 重新打包到一个 EAR 中
题
我正在开发一个项目,该项目有多个使用 Maven 构建并部署在 Java EE 中的 Web 应用程序 (WAR)。
这些 WAR 共享几个常见的业务 JAR(例如包含从 hibernate 加载的域对象的 JAR)以及其他框架 JAR(例如 Spring 和 Hibernate)。
他们使用 Spring MVC,应用程序上下文加载 Hibernate。由于每个 WAR 在 servlet 容器中都有自己的 Classpath,因此 Hibernate 缓存 (EHcache) 不是共享的。
我想要的是在不同的 WAR 之间共享缓存以及 hibernate 会话工厂 bean(以及其他常见 bean)。我认为这可以通过将这些 WAR 重新打包到 EAR 中来实现,然后我必须使用这些公共 bean 制作一个 spring 配置 XML,并在 WAR 的 Spring XML 中使用我所读到的类似 SingletonBeanFactoryLocator 的内容。
我在这里问的是是否有一种简单的方法可以做到这一点,最大限度地减少对 WAR 的 POM 的更改
笔记:我熟悉 WAR、tomcat 和 servlet,但不太熟悉 EAR。
提前致谢。
解决方案
嗯...大多数Java EE容器使用分离的类加载器用于战争,即使在一个EAR(即使在Java EE规范确实不的单个EAR的模块之间的任务类装载隔离),所以我不会期望太多从EAR包装,特别是如果你希望你的应用程序保持便携式(也就是说,如果你不想依赖任何应用程序服务器的具体行为)。
现在,如果真的是有意义的共享多个应用程序之间的会话工厂和你的二级缓存,也许考虑到单个WAR将它们合并。这将是国际海事组织最简单的方法。不过,我会忍不住要问的他们为什么分开的呢?当应用程序是分开的,他们有最长时间单独治理的,我不知道,如果部署在一起会是在这种情况下是个好主意。
如果合并的战争是不是一种选择,请告诉我们您所使用的容器。
其他提示
你有没有考虑利用连贯的集群的L2缓存?如果您使用多个应用服务器,你可能会看到那么作为他们都共享相同一致的缓存
更多的好处在多战争 Spring 应用程序中使用共享父应用程序上下文