【发布时间】:2011-10-21 13:36:42
【问题描述】:
将应用程序部署为 EAR(带有 1 个 EJB 和 1 个 WAR 模块)与单独的模块有什么区别?我想使用 GlassFish 3 Web 配置文件,但它不支持 EAR 存档。我可以简单地将 EJB 和 WAR 用作单独的模块吗?还有其他选择吗?
【问题讨论】:
标签: java jakarta-ee war java-ee-6 ear
将应用程序部署为 EAR(带有 1 个 EJB 和 1 个 WAR 模块)与单独的模块有什么区别?我想使用 GlassFish 3 Web 配置文件,但它不支持 EAR 存档。我可以简单地将 EJB 和 WAR 用作单独的模块吗?还有其他选择吗?
【问题讨论】:
标签: java jakarta-ee war java-ee-6 ear
3 种部署变体之间似乎有些混淆:
在第一种情况下,逻辑上您有一个应用程序,但一个应用程序分为两层。 WEB 模块与EJB 模块是隔离的,因为它可以使用EJB 模块中的类,但EJB 模块不能使用WEB 模块中的类。由于它是单个应用程序,因此可以使用对 EJB bean 的本地访问,并且 EJB bean 的注入按预期工作。
在第二种情况下(您似乎在问题中提到了这种情况),没有逻辑上的单个应用程序,而是两个独立的模块。它们确实在同一个 JVM 中运行,但 Java EE 官方不允许使用本地访问,而必须使用远程访问(尽管实际上本地访问通常仍然有效)。此外,在 Web 模块中的 bean 中注入 EJB bean 不能直接使用简单的 @EJB 注释,而是必须使用指定全局 JNDI 名称的 lookup 属性。
最后,第三种情况(您似乎没有提到,但 'home' 提到了)与第一种情况有点相似,但在这种情况下没有分层和隔离。 EJB bean 可以直接从 Web 模块的其余部分访问所有类。
网络配置文件仅支持最后一种部署情况。不支持 EAR 和独立 EJB 部署。
【讨论】:
context-root ?为什么 ejb module 中的 websocket 不可访问,但 war module 中的 war module 可访问?!!!有什么解决办法吗?
将应用程序部署为 ear(带有 1 个 ejb 和 1 个 war 模块)与单独的模块有什么区别?
不是一个完整的列表:在 EAR 中,您也可以定义 Utility JAR,它们位于例如EAR/lib 并且可以被 WARs 和 EJB JARs 重用。 EAR 文件通常提供专有的部署功能,例如在 WebSphere 中,您可以指定 DataSource 详细信息,因此您不必使用管理实用程序定义 DataSource(和 JDBC 驱动程序)。
因为我想使用 Glassfish 3 网络配置文件,但它不支持耳朵存档。我可以简单地使用 ejb 和 war 作为单独的模块吗?还有其他选择吗?
是的,Web 配置文件规范明确允许您将轻量级 EJB 版本部署为WAR 的一部分。只需将 EJB JAR 放在 WARs WEB-INF/lib 中。此链接提供了功能比较(网络配置文件与成熟):http://glassfish.java.net/downloads/v3-final.html
【讨论】: