EAR vs separate EJB + WAR

2022-09-02 03:27:38

将应用程序部署为 EAR(具有 1 个 EJB 和 1 个 WAR 模块)与单独模块有什么区别?我想使用 GlassFish 3 Web 配置文件,但它不支持 EAR 存档。我可以简单地将 EJB 和 WAR 用作单独的模块吗?还有其他选择吗?


答案 1

在 3 种部署变体之间似乎存在一些混淆:

  1. 包含 EJB 和 WEB 模块的 EAR
  2. 部署一个单独的 EJB 模块和一个单独的 WEB 模块
  3. 部署包含 EJB 类或 EJB jar 的 WEB 模块。

在第一种情况下,您在逻辑上有一个应用程序,但一个应用程序分为两层。WEB 模块与 EJB 模块是隔离的,因为它可以使用 EJB 模块中的类,但 EJB 模块不能使用 WEB 模块中的类。由于它是单个应用程序,因此可以使用对 EJB Bean 的本地访问,并且注入 EJB Bean 可以按预期工作。

在第二种情况下(您似乎在问题中提到了这一点),没有一个合乎逻辑的单个应用程序,而是两个独立的模块。它们确实在同一个JVM中运行,但官方Java EE不允许使用本地访问,并且必须使用远程访问(尽管实际上本地访问通常无论如何都有效)。此外,在 Web 模块中的 bean 中注入 EJB Bean 不能直接使用简单的注释,而是必须使用指定全局 JNDI 名称的属性。@EJBlookup

最后,第三种情况(你似乎没有提到,但“家”提到)与第一种情况有点相似,但在这种情况下没有分层和隔离。EJB bean 可以直接从 Web 模块的其余部分访问所有类。

Web 配置文件仅支持此最后一种部署情况。EAR 和独立 EJB 部署都不受支持。


答案 2

将应用程序部署为耳朵(具有 1 个 ejb 和 1 个 war 模块)与单独模块有什么区别?

不是一个完整的列表:在 EAR 中,您也可以定义实用程序 JAR,它们位于例如 EAR/lib 中,可以由 WAREJB JAR 重用。通常,EAR 文件提供繁琐的部署功能,例如,在 WebSphere 中,您可以指定数据源详细信息,这样就不必使用管理实用程序定义数据源(和 JDBC 驱动程序)。

由于我想使用Glassfish 3 Web配置文件,但它不支持耳朵存档。我可以简单地使用ejb和war作为单独的模块吗?还有其他选择吗?

是的,Web 配置文件规范明确允许您部署轻量级 EJB 版本作为 WAR 的一部分。只需将 EJB JAR 放在 WAR 中即可。此链接提供了功能比较(Web 配置文件与完整):http://glassfish.java.net/downloads/v3-final.htmlWEB-INF/lib


推荐