java - EAR 与单独的 EJB + WAR

标签 java jakarta-ee war java-ee-6 ear

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

最佳答案

3 种部署变体之间似乎有些混淆:

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

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

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

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

网络配置文件仅支持最后一种部署情况。不支持 EAR 和独立 EJB 部署。

关于java - EAR 与单独的 EJB + WAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968587/

相关文章:

java - 为什么使用 GenericServlet 无法进行 session 管理?

java - 如果不是独立构建,Maven war 包含额外的依赖项

使用 Hudson + Artifactory 时,Maven WAR 覆盖问题

java - 可调用 boolean 值的语法是什么

java - 在使用 Java 泛型方面需要一些帮助

jakarta-ee - Apache Geronimo 的 jndi 默认上下文中的 java.lang.String - 如何?

spring - Intelli j idea调试时tomcat加载低版本spring库

java - 使用 Selenium Apache POI Java webdriver 在 setCellValue() 的数据表 excel 中未打印值

Java string.split( ) 在逗号或行尾

java - Hibernate Spring 双向多对多删除不起作用