1

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

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

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

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

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

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

提前致谢。

4

3 回答 3

0

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

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

如果不能合并 WAR,请告诉我们您使用的是哪个容器。

于 2010-02-22T15:27:53.297 回答
0

您是否考虑过使用一致的集群 L2 缓存?如果您使用多个应用服务器,您可能会看到更多好处,因为它们都将共享相同的一致缓存

于 2011-01-26T19:53:47.217 回答
0

在多战争 Spring 应用程序中使用共享的父应用程序上下文

http://blog.springsource.org/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/

于 2013-08-30T15:59:13.713 回答