`

对JAVAEE、规范的一点理解

阅读更多
有几个问题,一直没搞清楚,今天问了很多人,懂了一点点,在这里总结一下

问题是:什么是JAVA EE,各种规范的接口的jar包(及源码)怎么获取,各种规范的实现的jar包(及源码)怎么获取

1、什么是JAVA EE

JAVA EE是由一系列规范组成的,规范是由JCP制定的,并且提供了参考实现。规范(Specification)是一系列接口,不包含具体实现

有以下常见的JAVA EE实现,包括JBOSS、GLASSFISH等。而tomcat是一个servlet容器,实现了servlet规范、jsp规范。但是它并没有实现EJB、JMS、JPA等规范,所以tomcat不是一个完整的JAVA EE实现

在oracle网站上,下载JAVA EE SDK时,会同时下载GLASSFISH,也就是同时下载了JAVA EE SDK,及一个JAVA EE的实现



2、怎么获取某个规范的接口的jar包

直觉上,我觉得既然规范是JCP制定的,那它当然也就应该负责提供接口的jar包及源码,比如jsr-914.jar,jsr-914_source.jar

然后实现规范的产商,基于这个jar包开发各自的实现;而规范的使用者,也基于这个jar包调用。这样可以保证接口和实现的分离

不过事实上,好像不是这样的。很多规范的接口jar包,我在www.jcp.org、www.java.net、www.oracle.com上,都找不到下载的链接。

有人说是因为从sun把java卖给oracle之后,oracle关闭了很多项目,所以这些jar包都找不着了,我也不知道是不是这样

总之,我感觉没有一个很方便的途径,可以获取到各种规范的“官方jar包”

不过有2个办法,都可以做到

第一个办法,是可以下载一个相关规范的实现,实现里肯定是有接口jar包的。还是拿jsr-914举例,我下载了2个实现,activemq和jboss

在activemq安装目录的lib目录下,可以找到接口的jar



在jboss安装目录的/modules/javax/jms/api/main目录下,也可以找到



第二个办法,好像更方便一点。eclipse有一个项目叫eclipse orbit,在这个项目里,可以找到大部分的规范接口jar包

以下是官方对此项目的说明:
This project will provide a repository of bundled versions of third party libraries that are approved for use in one or more Eclipse projects. The repository will maintain old versions of such libraries to facilitate rebuilding historical output. It will also clearly indicate the status of the library (i.e., the approved scope of use). The repository will be structured such that the contained bundles are easily obtained and added to a developer's workspace or target platform.

下载后的jar包,放在eclipse安装目录的plugins目录下,名字看起来比较奇怪



通过这2种方式,都可以得到规范的接口jar包,把它们加入到eclipse的工程里看一下:







可以看到3个jar包中的内容基本是一样的,根据javaeye网友canghailan的说法,所有这些jar包,都是经过了JCP认证的,所以都可以直接使用。那我理解这就相当于JCP偷了懒,本来这个jar包应该是由它提供的,但是它没有这么做。而是由各实现提供商来提供这个jar包,JCP只负责认证

3、怎么获取某个规范的接口的jar包的源码

其实搞清楚了上面一个问题,这个问题就很简单了。

orbit项目对每个接口jar包,都提供了相应的源码。所以如果是通过orbit得到jar包,那也就一定能够得到源码

如果是通过下载实现的方式获取到接口jar包,那么如果这个实现是开源的,就能得到相应的源码;如果不是开源的实现,那么就得不到源码了

比如说tomcat是比较方便的,可以直接下载并解压,得到apache-tomcat-7.0.23-src,其中的java目录,就是各种源码



jboss也是开源的,不过没有tomcat那么方便,需要下载以后自己再跑脚本进行编译

不过这里有一点要澄清一下,就是一般来说,开发者是不需要用到接口jar包的源码的

http://java.net/jira/browse/GLASSFISH-11389,这个帖子里说到:

To assist developers to do what?
The corresponding JARs are stripped (no bytecode for methods) and are meant to
be used only for compilation. IDEs like NB or Eclipse bundle a zip for the javadoc.
What other use case do you need to get the src? Debugging? In this case, these
jars are not used for execution so also not for debugging. In the case of
debugging, I think there is a complete GF src somewhere to step into the real
code you execute from the real non stripped gf jars.

接口jar包的源码是移除的,只是用于编译。一般的IDE都有zip文件来提供javadoc。对于需要debug的场景,需要源码的也应该是实现类,而不是接口

http://stackoverflow.com/questions/7457810/how-to-get-the-source-code-for-the-javaxjavaee-api-6-0-jar,这个帖子也表达了类似的意思:

The purpose of the javaee-api module is to satisfy compile-time dependencies (That is why the Maven scope is set to provided). The module contains interface declarations (or contract) which must be satisfied by the J2EE container you plan to use.

If you really need/want to see the source code, I'd suggest taking a look at one of the open source J2EE containers.

接口jar包的主要目的是满足编译时的依赖

所以,一般来说,开发者是不需要用到接口jar包的源码的,无论是为了javadoc或者debug,都不需要。当然,你可以说我就是想看看,那可以用上面说的方法获取到

4、怎么获取某个规范的实现的jar包/源码

搞清楚了上面3个问题,这个问题也就解决了。比如要得到tomcat的servlet实现的jar包,就下载tomcat,在其中的lib目录下就有



然后,如果你选择的实现是开源的,那就再下载一下其源码发布包,就可以得到源码了

5、题外话

在eclipse开发JAVA EE应用,在编译时需要引入所需的jar包,这跟最终的目标容器是有关系的,比如我打算开发一个部署在jboss中的WEB应用,那么eclipse会自动导入jboss-library



如果是打算部署在tomcat里,那么eclipse会导入tomcat-library



可以看到,这2个库是不一样的。但是,这个时候导入的jar包,只是为了满足编译时的需要,这些jar包并不会被打入最后的.war包里(WEB-INF/lib下的才会)。这些Runtime Library,在运行时会从容器的classpath里被找到并加载

理论上来说,开发一个servlet应用,就算开发时选择的是JBoss Runtime Library,但是只引用了接口,没有依赖jboss具体的实现类的话,那么打出的.war包,在运行时扔到tomcat里也是可以跑的。原因前面说过了,双方的servlet-api.jar,都是经过JCP认证的,所以能够保证一致性。但是如果编码时依赖了JBoss提供的实现类,那到tomcat里就绝对跑不了了

但是,如果开发的是完整的JAVA EE应用,比如依赖了JMS、EJB的接口,那扔到tomcat里就不能跑了,还需要额外的JMS中间件的支持,原因上面也说过了,因为tomcat只是一个servlet容器,部分实现了JAVA EE规范,不是一个JAVA EE的完整实现
  • 大小: 20.8 KB
  • 大小: 49 KB
  • 大小: 11.4 KB
  • 大小: 33.1 KB
  • 大小: 11.9 KB
  • 大小: 12.8 KB
  • 大小: 12.2 KB
  • 大小: 121.4 KB
  • 大小: 120.4 KB
  • 大小: 61 KB
  • 大小: 40.9 KB
分享到:
评论

相关推荐

    JavaEE6规范中文版(CHM)

    JavaEE6,全称为Java Platform, Enterprise Edition 6,是Oracle公司推出的用于构建...通过学习和理解这些JavaEE6规范,开发者能够更好地掌握企业级应用开发的最佳实践,提高开发效率,构建稳定且可扩展的应用系统。

    JavaEE 6 规范中文版

    ### JavaEE 6 规范知识点详解 #### 一、JavaEE 6 概述 - **背景**:随着企业需求的变化,为了更好地服务于客户、员工及供应商,现代企业需要扩展自身影响力的同时降低成本并提高沟通效率。这要求企业级应用不仅...

    javaEE6规范中文版

    javaEE6规范中文版。根据chinaitlab在线教程制作,仅供学习,不能用做商业用途。

    经典JavaEE5规范学习笔记

    NULL 博文链接:https://hanyi366.iteye.com/blog/1155573

    JavaEE英文规范文本

    这个"JavaEE英文规范文本"很可能包含了JavaEE 7的官方技术文档,它是开发者理解、学习和遵循JavaEE 7开发规范的重要参考资料。下面我们将深入探讨JavaEE 7的一些核心知识点。 1. **Servlet技术**:Servlet是JavaEE...

    JavaEE5.0_API_帮助文档

    JavaEE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级应用的一套标准规范和开发框架。JavaEE5.0是这一系列规范的一个重要版本,它在2006年发布,带来了许多改进和简化,使得开发过程更为高效。本...

    javaee_src.zip

    JavaEE Src.zip是一个压缩包,其中包含了JavaEE应用程序开发的源代码。JavaEE,全称为Java Platform, Enterprise ...总的来说,这个压缩包对于提升JavaEE开发技能,尤其是对源码级别的理解和调试能力,具有很大的价值。

    JavaEE简历如何写

    可以指导你如何正确填写简历,从而面试上中意的JAVAEE工作

    javaee大作业实例

    JavaEE,全称为Java Platform, ...通过学习和分析这个实例,读者可以加深对JavaEE的理解,掌握如何在实际环境中部署和运行JavaEE应用。同时,这也是一个很好的学习资源,帮助初学者将理论知识转化为实践经验。

    JavaEE期末复习模拟题

    6. **JPA(Java Persistence API)**:JPA是JavaEE中的ORM(对象关系映射)规范,简化了Java应用与数据库之间的数据操作。 7. **JSF(JavaServer Faces)**:JSF是一种MVC(模型-视图-控制器)框架,用于构建用户...

    JavaEE源码javaEE相关安装包及教程

    - **NetBeans**:同样是一款免费且开源的IDE,内置了对JavaEE的支持。 ### 3. JavaEE 教程资源 #### 3.1 在线教程资源 对于希望学习JavaEE的开发者来说,网络上提供了大量的学习资源,包括但不限于官方文档、在线...

    JavaEE 5.0规范中文版

    ### JavaEE 5.0规范中文版知识点解析 #### 一、引言 JavaEE 5.0规范作为企业级应用开发的重要指南,定义了一套完整的API和SPI,旨在为开发者提供构建高度可扩展、高性能的Java应用所需的所有组件和技术。本规范...

    JavaEE6规范中文版

    JavaEE6规范中文版是Java企业版(Java Enterprise Edition)6.0的官方文档的中文翻译,涵盖了该版本中的各种技术标准和API。这个规范详细阐述了如何在企业级环境中开发、部署和管理分布式应用程序。JavaEE6是Java...

    JavaEE程序编码规范.doc

    JavaEE 程序编码规范 JavaEE 程序编码规范是一份重要的文档,它提供了 Java 企业版(Java Enterprise Edition)程序设计和开发的编码规范。该规范旨在确保 JavaEE 程序的可读性、可维护性和可扩展性。 变量的命名...

    javaee源代码

    总的来说,这个JavaEE源代码压缩包为开发者提供了一个宝贵的资源,不仅可以加深对JavaEE组件的理解,也有助于提升编程技巧和解决问题的能力。通过学习和分析源码,开发者可以更好地适应企业级开发环境,解决实际项目...

    JavaEE源码

    在myeclipse中查看这些源码,开发者不仅可以加深对JavaEE规范的理解,还能提升解决问题的能力,特别是在调试和优化性能时。同时,这也有助于学习和适应最新的JavaEE版本,例如JavaEE 8或 Jakarta EE,因为这些版本...

    javaee网络工程期末大作业

    【JavaEE网络工程期末大作业】是一门涵盖了Java企业级应用...通过这个JavaEE网络工程的期末大作业,学生将全面锻炼到从需求分析、设计、编码到测试的整个软件开发过程,加深对JavaEE平台的理解,提升实际项目开发能力。

    javaee 包,javaee.jar

    这个"javaee.jar"文件很可能包含了JavaEE规范中定义的各种API,使得开发者能够构建分布式、多层的企业系统,例如Web应用、ejb(Enterprise JavaBeans)、JMS(Java Message Service)等。 在JavaEE体系中,Servlet...

Global site tag (gtag.js) - Google Analytics