我有一个包含不同动态 Web 项目的 webapp,每个项目通常都包含一个 EJB 项目。我们希望让它们保持交互,例如通过 JNDI 使用彼此的 EJB 中的 bean 和类,共享同一个数据库或使用它们自己的数据库。但我们也希望能够在不同的服务器上保留不同的项目。
就架构和组织而言,此类项目的正确重点是什么?
我们应该如何使用 EAR?一只耳朵来统治他们并在黑暗中束缚他们?(对不起,必须做那个 LOTR 参考),或者每个服务器/Web 项目的 EAR,等等?
我有一个包含不同动态 Web 项目的 webapp,每个项目通常都包含一个 EJB 项目。我们希望让它们保持交互,例如通过 JNDI 使用彼此的 EJB 中的 bean 和类,共享同一个数据库或使用它们自己的数据库。但我们也希望能够在不同的服务器上保留不同的项目。
就架构和组织而言,此类项目的正确重点是什么?
我们应该如何使用 EAR?一只耳朵来统治他们并在黑暗中束缚他们?(对不起,必须做那个 LOTR 参考),或者每个服务器/Web 项目的 EAR,等等?
磁盘空间很便宜,但是如果你把所有东西都放在一个 EAR 中,你的应用服务器很可能会运行它们,即使你想要的只是服务 A。你最好打破常用的 EJB 并自己部署它们,并且每个单独的服务的组件在他们自己的 EAR 中。
然后,以 JBoss 为例,您可以简单地将工件直接复制到要在其上运行它们的任何服务器的部署目录中。
OrderManagement.ear InventoryManagement.ear StoreFront.ear
然后,您可以在任何特定服务器上拥有全部、部分或一无所有。
EJB 是模块化的,因此根据您要提供的服务,您应该提供适当的 EAR 以进行部署。此外,尝试使用 MBean 并将它们部署为独立的服务。管理界面在调试和测试时有很大帮助。
请记住错误修复/升级和回归测试场景。您在同一个 EAR 中拥有的 EJB 模块越多,需要回归测试的功能点就越多,即使您仅对其中一个模块进行了修复或添加了新功能也是如此。