将应用程序部署为EAR(具有1个EJB和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web配置文件,但它不支持EAR存档。我可以简单地将EJB和WAR用作单独的模块吗?还有其他选择吗?
最佳答案
3种部署变体之间似乎有些混淆:
在第一种情况下,从逻辑上讲,您有一个应用程序,但是将应用程序分为两层。从某种意义上说,WEB模块与EJB模块是隔离的,因为它可以使用EJB模块中的类,但是EJB模块不能使用WEB模块中的类。由于它是单个应用程序,因此可以使用对EJB Bean的本地访问,并且按预期进行EJB Bean的注入(inject)。
在第二种情况下(您似乎在问题中要提到),没有逻辑上的单个应用程序,而是两个单独的模块。它们确实在同一JVM中运行,但是正式Java EE不允许使用本地访问,而必须使用远程访问(尽管实际上本地访问通常无论如何都可以工作)。同样,在Web模块中的Bean中注入(inject)EJB Bean不能直接与简单的
@EJB
批注一起使用,而是必须使用lookup
属性指定全局JNDI名称。最后,第三种情况(您似乎没有提到,但提到了“家”)与第一种情况有些相似,但是在这种情况下没有分层和隔离。 EJB bean可以直接从Web模块的其余部分访问所有类。
Web配置文件仅支持最后一种部署情况。 EAR和独立EJB部署均不受支持。