我有3种不同的Web应用程序(WAR)。
现在有些class \ beans \ services在它们之间共享,
1)在另一个jar中共享beans \ services \ entities \ repositories(带有crud操作)是一个好习惯吗? 要么 每个共享项目都应该只包含pojos?
2)如果我分享一个罐子,有一些自动装配和弹簧豆,哪个弹簧容器运行它?它的根项目的容器?或者它有自己的容器?
3)任何提及这个问题的一些指示都会有所帮助
感谢。
答案 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容器的文档集中描述类加载器的组织。