EAR与单独的EJB + WAR

kar*_*kpl 21 java ear war java-ee java-ee-6

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

Arj*_*jms 32

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注释,而是lookup必须使用指定全局JNDI名称的属性.

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

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