将应用程序部署为 EAR(带有 1 个 EJB 和 1 个 WAR 模块)与单独的模块有什么区别?我想使用 GlassFish 3 Web 配置文件,但它不支持 EAR 存档。我可以简单地将 EJB 和 WAR 用作单独的模块吗?还有其他选择吗?
最佳答案
3 种部署变体之间似乎有些混淆:
- 一个包含 EJB 和 WEB 模块的 EAR
- 部署单独的 EJB 模块和单独的 WEB 模块
- 部署包含 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/