JavaEE——谁实现了该规范?

JavaEE——谁实现了该规范?,java,jakarta-ee,jboss,glassfish,application-server,Java,Jakarta Ee,Jboss,Glassfish,Application Server,我在核心Java和JavaEE方面有一些经验。我阅读了上面的各种问题,以便理解JavaEE到底是什么?因此,很少有人回答: 我有一些疑问: 1) 如果JavaEE只是一个规范,那么谁来实现它们呢?应用服务器(如JBOSS、GlassFish)是否实现了这些规范 2) 如果我是正确的,EJB规范是由EJB容器实现的,我相信EJB容器是应用服务器的一部分。现在,当我们作为开发人员编写EJB代码时,我们实际上在做什么?我的疑问是,EJB容器实现了EJB规范,所以我们是否覆盖了EJB的某些“规范部分”?

我在核心Java和JavaEE方面有一些经验。我阅读了上面的各种问题,以便理解JavaEE到底是什么?因此,很少有人回答:

我有一些疑问: 1) 如果JavaEE只是一个规范,那么谁来实现它们呢?应用服务器(如JBOSS、GlassFish)是否实现了这些规范

2) 如果我是正确的,EJB规范是由EJB容器实现的,我相信EJB容器是应用服务器的一部分。现在,当我们作为开发人员编写EJB代码时,我们实际上在做什么?我的疑问是,EJB容器实现了EJB规范,所以我们是否覆盖了EJB的某些“规范部分”?为什么EJB的某些部分是由EJB容器和开发人员正在编写的东西实现的?或者EJB的某些部分必须由EJB容器提供,而另一些部分必须由开发人员开发?我很难理解这一点

有谁能帮助理解这一点吗?

是的,像RedHat这样的EJB容器(应用程序服务器)供应商在其产品(如JBoss)中实现J2EE规范

他们不做的是实现任何业务逻辑(如果愿意的话,只是“管道”)。这就是应用程序开发人员的用武之地


就像apachehttpd或nginx实现HTTP协议规范一样,但这并不是一个网站所能做到的。

任何人都可以实现J2EE规范,尽管我不建议你自己尝试。没错,这通常是由应用程序服务器实现的,因此您可以在符合J2EE的容器上运行应用程序。还有一些开源库,当它们组合并添加到Tomcat中时,将实现该规范(例如,请参阅tomee)


当您编写应用程序时,您正在利用J2EE环境的优势,它将允许您编写复杂的应用程序,并关注您的特定需求。

在Java规范的情况下(Java EE、JSF、其他JSR),您通常在起草规范时创建一个参考实现(在JavaEE中是Glassfish),那么您就有了其他提供者,他们可以创建自己的规范实现(通常声称在某些方面它“更好”)

然后,作为开发人员,您可以编写代码来使用规范提供的功能,这些功能可以在任何兼容的实现上正确运行。

1)应用程序服务器实现规范,并在发布服务器时提供其实现的详细信息。作为参考,请查看这篇文章,它指定了JBoss7实现的各种JSR


2) 当我们只是使用ApplicationServer提供的任何实现时,实例将取自server提供的实现。然而,如果我们已经重写了一个类,那么我们重写的类将在我们的操作中提供。

任何人都可以实现java ee规范(),或者它的任何部分。当他们这样做时,他们可以(在购买并通过之后)声称与规范兼容。有许多供应商的应用服务器都是,但没有一家供应商实现完整的JavaEE规范。例如,glassfish(JavaEE参考实现)使用Red Hat的实现。有时候,供应商没有实现JavaEE规范的任何部分,他们抓取glassfish,添加特定于供应商的库,然后以自己的名义发布。为了声称兼容性,他们仍然需要通过认证过程并运行CTS

要找出所有实现该规范的供应商并不容易,因为并非所有供应商都经过认证过程。例如,它本身没有经过认证,而是作为Red Hat JBoss的一部分获得认证

每个规范都有一个API和一个书面pdf,它们都定义了每个实现的强制行为。这就是您在编写EJB代码时使用的方法。例如,创建ejb时:

import javax.ejb.Singleton;
@Singleton
public class MySingleton{
   ... 
}

@单例注释是规范的一部分,但是
MySingleton
类是您的EJB代码,它不是规范的一部分。然后EJB容器知道如何处理该类。

1)已在副本中得到响应。2) 我们,JavaEE开发人员,只是JavaEEAPI的最终用户。非常感谢您的评论,这很有意义。