Java EE - 谁实现了规范?

Cur*_*ind 9 java jboss glassfish application-server java-ee

我在核心Java和Java EE方面有一些经验.我阅读了有关SO的各种问题,以了解Java EE究竟是什么?在SO中几乎没有答案:什么是java-ee,什么是java-ee

我有些疑惑:

1)如果Java EE只是一个规范,谁来实现它们?应用服务器(如JBOSS,GlassFish)是否实现了这些规范?

2)如果我是正确的,EJB规范是由EJB容器实现的,我相信EJB Container是Application Server的一部分.现在,当我们作为开发人员编写EJB代码时,我们实际在做什么?我怀疑的是,EJB容器实现了EJB规范,所以我们是否覆盖了EJB的一些"规范部分"?为什么EJB的某些部分是由EJB容器实现的,还有一些是开发人员正在编写的东西?或者是EJB的某些部分必须由EJB容器提供,还有一部分由开发人员开发?我很难做到这一点.

请任何人帮助理解这个?

jan*_*pol 10

任何人都可以实现java ee规范(JSR342)或任何jsr作为其一部分.当他们这样做时,他们可以(购买并通过兼容性测试套件后)声称与规范兼容.有许多供应商的应用程序服务器与java ee兼容,但没有供应商实现完整的Java ee规范.例如,glassfish(java ee参考实现)使​​用Red Hat的CDI实现.有时,供应商没有实现java ee规范的任何部分,他们抓住glassfish,添加他们的供应商特定库,并以他们的名义发布它.要声称兼容性,他们仍然需要通过认证过程并运行CTS.

要找出实施规范的所有供应商并不是那么容易,因为并非所有供应商都经过认证过程.例如,Apache CXF本身没有经过认证,而是被认证为Red Hat JBoss的一部分.

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

import javax.ejb.Singleton;
@Singleton
public class MySingleton{
   ... 
}
Run Code Online (Sandbox Code Playgroud)

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