我在核心Java和Java方面有一些经验。为了理解Java到底是什么,我阅读了各种各样的问题。很少有答案是:究竟什么是java-ee?,什么是java-ee?
我有些怀疑:
1)如果Java只是一种规范,那么谁来实现它们呢?应用服务器(如JBOSS、GlassFish)实现这些规范吗?
2)如果我正确的话,EJB规范是由EJB容器实现的,并且我相信EJB容器是Application的一部分。现在,当我们作为开发人员编写EJB代码时,我们实际上在做什么?我的疑问是,EJB容器实现了EJB规范,所以我们是否正在重写EJB的某些“规范部分”?为什么EJB的某些部分是由EJB容器实现的,以及一些开发人员正在编写的东西呢?还是EJB的某些部分必须由EJB容器提供,而有些部分则由开发人员开发?我很难搞清楚这件事。
有人能帮我理解一下这一点吗?
发布于 2016-06-23 07:47:50
任何人都可以实现java规范(JSR342),或者它的一部分的任何jsr。当他们这样做时,他们可以(在购买和通过兼容性测试套件之后)声称与规范兼容。有许多供应商的应用服务器是兼容java ee,但没有供应商实现完整的java规范。例如,glassfish ( java参考实现)使用Red的CDI实现。有时,供应商没有实现java ee规范的任何部分,他们抓取glassfish,添加其特定于供应商的库,并以他们的名字发布它。要声明兼容性,他们仍然需要通过认证过程并运行CTS。
要找到实现该规范的所有供应商并不是那么容易,因为并不是所有的供应商都经过认证过程。例如,Apache不是单独认证的,而是作为Red的JBoss的一部分进行认证的。
每个规范都有一个API和一个书面pdf,这两个规范都定义了每个实现的强制行为。这就是在编写EJB代码时使用的内容。例如,当您创建ejb时:
import javax.ejb.Singleton;
@Singleton
public class MySingleton{
...
}@Singleton注释是规范的一部分,但是MySingleton类是您的EJB代码,它不是规范的一部分。然后,EJB容器知道如何处理该类。
发布于 2016-06-23 06:38:47
在Java规范的情况下(Java、JSF、其他JSR),通常在起草规范时创建了引用实现( Java中的Glassfish),然后有其他提供者可能创建自己的规范实现(通常声称在某种程度上它“更好”)。
然后,作为开发人员,您可以编写可以使用规范提供的工具的代码,这些工具将在任何兼容的实现上正确运行。
发布于 2016-06-23 06:34:23
是的,像RedHat这样的EJB容器(应用服务器)供应商在他们的产品(比如JBoss)中实现了J2EE规范。
他们不做的是实现任何业务逻辑(如果你愿意的话只是“管道”)。这就是应用程序开发人员进来的地方。
就像Apache或nginx实现HTTP协议规范一样,但这并不是网站所做的。
https://stackoverflow.com/questions/37983860
复制相似问题