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

时间:2010-02-22 15:06:04

标签: java spring maven-2 war ear

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

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

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

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

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

注意:我熟悉WAR,tomcat和servlet,但对EAR并不熟悉。

提前致谢。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)