3种部署变体之间似乎有些混淆:
- 包含EJB和WEB模块的EAR
- 部署单独的EJB模块和单独的WEB模块
- 部署包含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部署。



