将应用程序部署为EAR(使用1个EJB和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web配置文件,但它不支持EAR存档。我可以简单地将EJB和WAR用作单独的模块吗?还有其他选择吗?
答案 0 :(得分:32)
3种部署变体之间似乎存在一些混淆:
在第一种情况下,您逻辑上有一个应用程序,但有一个分为两层。 WEB模块与EJB模块隔离,因为它可以使用EJB模块中的类,但EJB模块不能使用来自WEB模块的类。由于它是单个应用程序,因此可以使用对EJB bean的本地访问,并且EJB bean的注入可以按预期工作。
在第二种情况下(你似乎在你的问题中指的是),没有一个逻辑的单一应用程序,而是两个独立的模块。它们确实在同一个JVM中运行,但官方Java EE不允许使用本地访问并且必须使用远程访问(尽管实际上本地访问通常仍然有效)。此外,在Web模块中的bean中注入EJB bean不能直接使用简单的@EJB
注释,而是必须使用指定全局JNDI名称的lookup
属性。
最后,第三种情况(你似乎没有提到,但“主页”提及)与第一种情况有点类似,但在这种情况下没有层级和隔离。 EJB bean可以直接从Web模块的其余部分访问所有类。
Web配置文件仅支持此最后部署情况。不支持EAR和独立EJB部署。
答案 1 :(得分:3)
将应用程序部署为耳机(使用1个ejb和1个战争模块)与单独模块的区别是什么?
不完整列表:在EAR中,您也可以定义 Utility JAR ,它们位于例如: EAR / lib ,可由 WAR 和 EJB JAR 重用。通常,EAR文件提供了prorietary部署功能,例如,在WebSphere中,您可以指定DataSource详细信息,这样就不必使用管理实用程序定义DataSource(和JDBC驱动程序)。
由于我想使用Glassfish 3网页配置文件,但它不支持ear存档。我可以简单地使用ejb和war作为单独的模块吗?还有其他选择吗?
是的,Web配置文件规范明确允许您将轻量级 EJB版本部署为 WAR 的一部分。只需将 EJB JAR 放在 WAR WEB-INF/lib
中。此链接提供功能比较(网络配置文件与完整版):http://glassfish.java.net/downloads/v3-final.html