我在核心Java和Java EE方面有一些经验。我阅读了有关SO的各种问题,以了解Java EE究竟是什么? SO中的答案很少:what-exactly-is-java-ee,what-is-java-ee
1)如果Java EE只是一个规范,谁来实现它们?应用服务器(如JBOSS,GlassFish)是否实现了这些规范?
2)如果我是正确的,EJB规范是由EJB容器实现的,我相信EJB容器是Application Server的一部分。现在,当我们作为开发人员编写EJB代码时,我们实际在做什么?我怀疑的是,EJB容器实现了EJB规范,所以我们是否覆盖了EJB的一些“规范部分”?为什么EJB的某些部分是由EJB容器实现的,还有一些是开发人员正在编写的东西?或者是EJB的某些部分必须由EJB容器提供,还有一部分由开发人员开发?我很难做到这一点。
任何人都可以帮助理解这个吗?
答案 0 :(得分:10)
任何人都可以实现java ee规范(JSR342)或其中的任何jsr。当他们这样做时,他们可以(在购买并通过Compatibility Test Suite之后)声称与规范兼容。有许多供应商的应用程序服务器为compatible with java ee,但没有供应商实现完整的Java ee规范。例如,glassfish(java ee参考实现)使用Red Hat的CDI实现。有时,供应商没有实现java ee规范的任何部分,他们抓住glassfish,添加他们的供应商特定库,并以他们的名义发布它。要声称兼容性,他们仍然需要通过认证过程并运行CTS。
要找出实施规范的所有供应商并不是那么容易,因为并非所有供应商都经过认证过程。例如,Apache CXF不是自己认证的,而是被认证为红帽JBoss的一部分。
每个规范都有一个API和一个书面pdf,它们都定义了每个实现的强制行为。这就是您在编写EJB代码时使用的内容。例如,当您创建ejb时:
import javax.ejb.Singleton;
@Singleton
public class MySingleton{
...
}
@Singleton注释是规范的一部分,但MySingleton
类是您的EJB代码,它不是规范的一部分。然后,EJB容器知道如何处理该类。
答案 1 :(得分:2)
在Java规范中'案例(Java EE,JSF,其他JSR)你通常在起草规范时创建了一个参考实现(在Java EE的情况下是Glassfish),然后你有其他的提供者可以创建他们自己的规范实现(通常声称它&#39) ; s"更好"在某种程度上。)
作为开发人员,您可以编写可以使用规范提供的工具的代码,这些代码可以在任何兼容的实现上正确运行。
答案 2 :(得分:1)
是的,像RedHat这样的EJB容器(应用服务器)供应商在他们的产品中实现了J2EE规范(比如JBoss)。
他们不做的是实施任何业务逻辑(只是"管道和#34;如果你愿意的话)。这就是应用程序开发人员的用武之地。
就像Apache HTTPD或nginx实现HTTP协议规范一样,但这不是网站制作的。
答案 3 :(得分:1)
任何人都可以实现J2EE规范,尽管我不建议您自己尝试。您是对的,这通常由应用程序服务器实现,以便您可以在符合J2EE的容器上运行您的应用程序。还有一些开源库,当它们组合并添加到Tomcat时将实现该规范(例如参见)。
编写应用程序时,您正在利用J2EE环境的优势,这将使您能够编写复杂的应用程序并专注于满足特定需求的需求。
答案 4 :(得分:1)
1)应用服务器实现规范,在发布服务器时,他们将提供实现的详细信息。有关参考,请查看此link,其中指定了JBOSS 7实现的各种JSR。
2)当我们只使用应用服务器提供的任何实现时,实例将从服务器提供的实现中获取。然而,如果我们已经覆盖了一个班级,那么我们的被覆盖的班级将被提供给我们的运营。