多个项目的共享项目

时间:2013-12-04 13:00:00

标签: java spring dependencies war shared

我有3种不同的Web应用程序(WAR)。

现在有些class \ beans \ services在它们之间共享,

1)在另一个jar中共享beans \ services \ entities \ repositories(带有crud操作)是一个好习惯吗? 要么 每个共享项目都应该只包含pojos?

2)如果我分享一个罐子,有一些自动装配和弹簧豆,哪个弹簧容器运行它?它的根项目的容器?或者它有自己的容器?

3)任何提及这个问题的一些指示都会有所帮助

感谢。

2 个答案:

答案 0 :(得分:0)

1)是的,这是一个很好的做法。将公共代码组合在一个单独的jar中,并在代表您的Web应用程序的每个项目中依赖它。

2)你不能在不同的模块上共享WAR,只能在JAR上共享......

答案 1 :(得分:0)

目前尚不清楚如何分享代码。

共享代码的一种方法是将共享代码/项目构建为JAR,然后将其包含在需要它的每个WAR文件的WEB-INF / lib目录中。这没有固有的问题。每个webapp的类加载器将加载它自己的类副本,每个类都有自己的静态,webapps不会相互干扰。这是“正常”的方式。

另一种方法是将JAR放入web容器的共享库目录中。这有问题:

  • 您在部署/重新部署方面存在潜在问题:

    • 共享库中的JAR只能通过重新启动容器来重新部署。

    • 您(通常)无法使用Web容器的管理页面/界面进行重新部署。

    • 还有一件事要记住要重新部署。

    • 如果不同的webapps需要不同版本的JAR ??

    • ,该怎么办?
  • 您可以通过共享类的静态来解决潜在的泄漏问题。

    • 信息可能会从一个Web应用程序泄漏到另一个Web应用程序。

    • 类型可能泄漏......导致“莫名其妙”的分类失败。

    • 你可以通过热重新加工来加剧“permgen泄漏”问题。

将共享JAR放在共享库目录中的唯一好处是,您可以通过在内存中只有一个共享库副本来减少代码占用空间。但通常情况下,储蓄根本不值得麻烦。


  

1)在另一个jar中共享beans \ services \ entities \ repositories(带有crud操作)是一个好习惯吗?或者每个共享项目应该只包含pojos?

我认为没有任何问题......只要你通过JAR-in-a-WAR方法分享。

  

2)如果我分享一个罐子,有一些自动装配和弹簧豆,哪个弹簧容器运行它?它的根项目的容器?或者它有自己的容器?

来自JAR-in-a-WAR的Bean由WAR webapp的Spring容器管理。我不确定另一种方法......但我怀疑它是一样的。 (我不希望Spring布线机制关心bean类是来自webapp的类加载器还是来自“library”目录的类加载器。)

  

3)任何关于在这个问题上有所了解的提法都会有所帮助。

没什么特别的。但是,应该在Web容器的文档集中描述类加载器的组织。