EAR与单独的EJB + WAR

将应用程序部署为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的注入可以按预期工作。

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

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

Web配置文件仅支持最后的部署情况。 不支持EAR和独立EJB部署。

将应用程序部署为耳机(1 ejb和1 war模块)与单独模块的区别是什么?

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

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

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