2012-10-26 100 views
2

创建企业Java EE应用程序时,必须将部分业务逻辑(如消息传递(MDB))放入EJB模块中。但是,有些EJB可以放在EJB模块或Web模块中。我知道分离模块允许Web层和业务层部署在不同的机器上。因此,我会将我的@Stateful购物车EJB放入Web模块中。然而,我想不出一个可以应用于每一项业务逻辑的标准标准,决定将EJB包含在哪里。有没有一个指导方针,标准或建议的做法呢?将业务逻辑放在Java EE企业应用程序中的位置

+0

你能说出这些'商业逻辑'吗? – 2012-10-29 08:08:15

+0

- 处理通过消息收到的外部应用程序的报告,同时将它们推送到Web界面(通过Web界面进行实时监控)并将结果保存到数据库。 - 我在问题中提到的购物车示例,以及处理从Web界面收集哪些详细信息的客户订单。 - 基于用户内容生成图形和图像。 - 根据用户提供的参数在某些NoSQL数据源上生成查询,运行查询并处理结果以有意义的方式显示。 这些只是样本。 –

回答

1

这是我迄今发现的。

EJB模块应该包含大型企业应用程序的业务逻辑核心。另一方面,Web模块包含了一个完整的Web应用程序,该应用程序应该利用EJB模块提供的业务引擎。通常,这些模块分布在不同的服务器上以用于较大的应用程序,除了需要使用驻留在EJB模块中的核心业务逻辑提供的服务的Web应用程序之外,还有客户端应用程序(例如Swing/JFX桌面应用程序)。

换句话说,一会就把业务逻辑独立的EJB模块中,如果:

  1. 它的目的是通过多个网络或桌面应用程序中使用,或
  2. 缩放的考虑,可能会迫使核心业务逻辑要由不同的服务器处理

在其他情况下,可以将他的EJB放入Web模块中,并将整个事件打包为WAR文件。

+1

的确,但是认识到将EJB bean从Web模块中的包移动到他们自己的EJB模块是微不足道的。因此,您可以从如此简单的包开始,然后在您的应用程序足够大或需要单独部署业务层时移至模块。 –

+0

您发现的最后一部分,EJB可以放在WAR中,如果EJB模块存在,那么它使用EAR进行部署? EAR中的WAR和EJB?问候 – user75ponic

+0

是的。 EAR(企业应用程序)由许多WAR(Web模块)和一些JAR(ejb模块)组成。当您的企业应用程序设计为分布在多个服务器(多个模块)中时,这是适当的,但您希望在特定情况下将所有模块部署在单个服务器上。但是,如果您不想在不同服务器之间分发模块,则可以将所有EJB放在WAR文件中。 –

1

正如您在上一句中所述,这正是我所建议的:对于JEE6应用程序使用WAR包装,因为在大多数情况下您不需要EAR。

如果您需要在多个应用程序之间共享业务逻辑,那么您可以将其部署为单独的模块。但通常这样的事情对于扩展的原因并不是必需的,因为您也可以相应地调整运行WAR的应用程序服务器。