将应用程序部署为EAR(包含1个EJB模块和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web Profile,但它不支持EAR存档。我是否可以将EJB和WAR作为单独的模块使用?还有其他选项吗?
将应用程序部署为EAR(包含1个EJB模块和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web Profile,但它不支持EAR存档。我是否可以将EJB和WAR作为单独的模块使用?还有其他选项吗?
似乎有些混淆了3个部署变体:
在第一种情况下,您实际上有一个应用程序,但它分为两个层。 WEB模块与EJB模块隔离,意味着它可以使用来自EJB模块的类,但是EJB模块无法使用来自WEB模块的类。由于它是单个应用程序,因此可以使用本地访问EJB bean,并且注入EJB bean的工作方式符合预期。
在第二种情况下(您在问题中提到的),实际上并没有逻辑上的单个应用程序,而是两个独立的模块。它们在同一个JVM中运行,但正式的Java EE不允许使用本地访问,必须使用远程访问(尽管实际上本地访问通常仍然有效)。此外,在Web模块中的bean中注入EJB bean不能直接使用简单的@EJB
注释,而必须使用lookup
属性指定全局JNDI名称。
最后,第三种情况(您似乎没有提到,但是'home'提到了)与第一种情况有些相似,但在这种情况下没有层和隔离。EJB bean可以直接访问Web模块的所有类。
Web配置文件仅支持此最后一种部署情况。不支持EAR和独立EJB部署。
将应用程序部署为ear(具有1个ejb和1个war模块)与单独的模块有什么区别?
以下不是一个完整的列表:在EAR中,您可以定义Utility JARs,它们位于例如EAR/lib中,可以被WARs和EJB JARs重用。通常EAR文件提供专有的部署功能,例如,在WebSphere中,您可以指定DataSource细节,这样您就不必使用管理实用程序定义DataSource(和JDBC驱动程序)。
由于我想使用Glassfish 3 web profile,但它不支持ear存档。 我能否简单地将ejb和war作为单独的模块使用?还有其他选择吗?
是的,web profile规范明确允许您将轻量级 EJB版本作为WAR的一部分进行部署。只需将EJB JAR放置在WARs WEB-INF/lib
内即可。此链接提供了功能比较(Web profile与完整版):http://glassfish.java.net/downloads/v3-final.html