Java EE - 谁实施规范?
Java EE - who implement the specification?
我在核心 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 容器是应用程序服务器的一部分。现在,当我们作为开发人员编写 EJB 代码时,我们实际上在做什么?我的疑问是,EJB 容器实现了 EJB 规范,那么我们是否覆盖了 EJB 的某些 "specification part"?为什么EJB的一部分是由EJB容器实现的,而有些东西是开发人员在写的?或者是EJB 的某些部分必须由EJB 容器提供,而某些部分由开发人员开发?我很难理解这一点。
请问有人能帮忙理解一下吗?
是的,RedHat 等 EJB 容器(应用程序服务器)供应商在其产品中实现了 J2EE 规范(如 JBoss)。
他们不执行任何业务逻辑(如果您愿意,只需执行 "plumbing")。这就是应用程序开发人员的用武之地。
就像Apache HTTPD 或nginx 实现了HTTP 协议规范,但那不是一个网站。
任何人都可以实现 J2EE 规范,但我不建议您尝试自己动手。没错,这通常由应用程序服务器实现,因此您可以 运行 在符合 J2EE 的容器上运行您的应用程序。还有一些开源库,将其组合并添加到 Tomcat 后将实现规范(例如,参见 tomee)。
当您编写应用程序时,您正在利用 J2EE 环境的优势,这将使您能够编写复杂的应用程序并专注于您的特定需求。
在 Java 规范的情况下(Java EE、JSF、其他 JSR),您通常会在起草规范时创建一个参考实现(在 Java EE 的情况下是 Glassfish) , 然后你有其他供应商可能会创建他们自己的规范实现(通常以某种方式声称它是 "better")。
您作为开发人员然后编写可以使用规范提供的工具的代码,这将 运行 在任何兼容的实现上正确。
1) 应用服务器实施规范,在发布服务器时,他们将提供实施细节。有关参考,请查看此 link,它指定了 JBOSS 7.
实现的各种 JSR
2) 当我们只是使用应用服务器提供的任何实现时,实例将从服务器提供的实现中获取。而如果我们覆盖了 class,那么我们覆盖的 class 将在我们的操作中提供。
任何人都可以实施 java ee 规范(JSR342), or any jsr that's part of it. When they do, they can (after buying and passing Compatibility Test Suite) claim to be compatible with the specification. There is a number of vendors with their application servers which are compatible with java ee, but no vendor implement full java ee specification. For instance, glassfish (the java ee reference implementation) uses Red Hat's CDI 实施。有时,供应商不实施 java ee 规范的任何部分,他们抓住 glassfish,添加他们的供应商特定的库,并以他们的名义发布。要声称兼容性,他们仍然需要通过认证过程和 运行 CTS。
要找出所有实施该规范的供应商并不容易,因为并非所有供应商都经过认证过程。例如,Apache CXF 本身并未经过认证,而是作为 Red Hat JBoss.
的一部分获得认证的
每个规范都有一个 API 和一个书面 pdf,它们都定义了每个实现的强制行为。这就是您在编写 EJB 代码时使用的内容。例如,当您创建一个 ejb 时:
import javax.ejb.Singleton;
@Singleton
public class MySingleton{
...
}
@Singleton 注释是规范的一部分,但是 MySingleton
class 是您的 EJB 代码,它不是规范的一部分。然后 EJB 容器知道如何处理 class.
我在核心 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 容器是应用程序服务器的一部分。现在,当我们作为开发人员编写 EJB 代码时,我们实际上在做什么?我的疑问是,EJB 容器实现了 EJB 规范,那么我们是否覆盖了 EJB 的某些 "specification part"?为什么EJB的一部分是由EJB容器实现的,而有些东西是开发人员在写的?或者是EJB 的某些部分必须由EJB 容器提供,而某些部分由开发人员开发?我很难理解这一点。
请问有人能帮忙理解一下吗?
是的,RedHat 等 EJB 容器(应用程序服务器)供应商在其产品中实现了 J2EE 规范(如 JBoss)。
他们不执行任何业务逻辑(如果您愿意,只需执行 "plumbing")。这就是应用程序开发人员的用武之地。
就像Apache HTTPD 或nginx 实现了HTTP 协议规范,但那不是一个网站。
任何人都可以实现 J2EE 规范,但我不建议您尝试自己动手。没错,这通常由应用程序服务器实现,因此您可以 运行 在符合 J2EE 的容器上运行您的应用程序。还有一些开源库,将其组合并添加到 Tomcat 后将实现规范(例如,参见 tomee)。
当您编写应用程序时,您正在利用 J2EE 环境的优势,这将使您能够编写复杂的应用程序并专注于您的特定需求。
在 Java 规范的情况下(Java EE、JSF、其他 JSR),您通常会在起草规范时创建一个参考实现(在 Java EE 的情况下是 Glassfish) , 然后你有其他供应商可能会创建他们自己的规范实现(通常以某种方式声称它是 "better")。
您作为开发人员然后编写可以使用规范提供的工具的代码,这将 运行 在任何兼容的实现上正确。
1) 应用服务器实施规范,在发布服务器时,他们将提供实施细节。有关参考,请查看此 link,它指定了 JBOSS 7.
实现的各种 JSR2) 当我们只是使用应用服务器提供的任何实现时,实例将从服务器提供的实现中获取。而如果我们覆盖了 class,那么我们覆盖的 class 将在我们的操作中提供。
任何人都可以实施 java ee 规范(JSR342), or any jsr that's part of it. When they do, they can (after buying and passing Compatibility Test Suite) claim to be compatible with the specification. There is a number of vendors with their application servers which are compatible with java ee, but no vendor implement full java ee specification. For instance, glassfish (the java ee reference implementation) uses Red Hat's CDI 实施。有时,供应商不实施 java ee 规范的任何部分,他们抓住 glassfish,添加他们的供应商特定的库,并以他们的名义发布。要声称兼容性,他们仍然需要通过认证过程和 运行 CTS。
要找出所有实施该规范的供应商并不容易,因为并非所有供应商都经过认证过程。例如,Apache CXF 本身并未经过认证,而是作为 Red Hat JBoss.
的一部分获得认证的每个规范都有一个 API 和一个书面 pdf,它们都定义了每个实现的强制行为。这就是您在编写 EJB 代码时使用的内容。例如,当您创建一个 ejb 时:
import javax.ejb.Singleton;
@Singleton
public class MySingleton{
...
}
@Singleton 注释是规范的一部分,但是 MySingleton
class 是您的 EJB 代码,它不是规范的一部分。然后 EJB 容器知道如何处理 class.