您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

企业级Java标准体系及产品级服务器TomEE

时间:2020-07-09 16:37:51  来源:  作者:

导引

作为当前业界最成熟的编程语言的JAVA,以其开发的各类应用,可以说是涉及到每个领域,包括而不限于桌面应用、Web应用、移动应用、智能终端、云端应用、IoT应用、大数据应用、AI应用、区块链应用等等,基本是无所不包,而且围绕Java形成的各类生态圈也蔚然繁荣。同时,以JVM为核心的Java语言也在不断的兼蓄并包其它语言的特性与优点,依然在稳健的发展中。

我们知道,为了保持Java的新特的快速验证和应用采纳,其版本的发布周期早已更改,目前Java SE 14已发布,Java 15的到来也为其不远了。

随着Java SE新特的引入,Java企业版也相应的做了很多更新和改进,尤其为了适应现代的企业级开发和微服务架构风格的应用,最新的企业级Java也已经稳定采用在,最新的企业级Java为 Jakarta EE 8(脱胎于Oracel的Java EE 8,由于托管给Eclipse基金会而重新发布的企业级Java规范,与Java EE 8本质上一样)。

为了更好的理解企业级Java ,那么我们就来总体认识一下最新的Jakarta EE 8,了解一下其规范标准的总体结构组成。

Jakarta EE结构总览

企业级Java由一系列标准规范组成,各个规范的最终实现产品,一般根据产品自身的定位而选择性实现不同标准,而并非强制性要求要实现所有规范,比如Tomcat实现为Servlet容器,OpenJPA实现了JPA应用规范,glassfish则实现了所有企业级标准。也就是说,开发的应用程序所依托的服务器产品的实现是按照不同的需求而实现相应规范或全部规范的。

对于企业级Java标准体系构成,总体可以参照如下架构模型来加以理解:

企业级Java标准体系及产品级服务器TomEE

Jakarta EE 8规范体系架构

如图上所示,它描述了Java EE平台架构元素之间的关系。注意,该图显示的是组件元素之间的逻辑关系,而并不意味着将元素物理地划分为单独的机器、进程、地址空间或虚拟机等。

容器(用单独的矩形表示)是Java EE运行时环境,为矩形上半部分中表示的应用程序组件提供所需的服务。所提供的服务由矩形下半部分的方框表示,一些由应用服务器实现的符合规范的组件。例如,应用客户端容器向应用客户端提供Java消息服务(JMS) APIs以及所表示的其他服务。下面将解释所有这些服务。参见 下图“Java EE标准服务组件”。

箭头表示需要访问Java EE平台的其他部分。应用客户端容器通过JDBC API与数据库系统连接,为应用客户端提供了对Java EE所需数据库的直接访问。由Web容器为JSP页面、JSF应用和servlet提供类似的数据库访问,EJB容器为企业bean提供类似的访问。

如前所述,Java平台标准版(Java SE)的APIs由Java SE运行时环境为每种类型的应用组件提供支持。

企业级Java标准体系及产品级服务器TomEE

Java EE标准服务组件

作为完整Java EE 产品规范需求,产品级中间件服务器必须实现其中的一些规范。

而且作为 EE 8产品规范,要完整支持Java SE 8以及由公共注释规范定义的资源和组件生命周期注释(Resource , Resources , PostConstruct ,PreDestroy)。同时,所有企业级产品必须支持JNDI “java:” 命名上下文以及Java Transaction API (JTA)。

对于上述的企业标准规范,其相关组件规范的版本情况,罗列如下:

1) EJB 3.2

2) Servlet 4.0

3) JSP 2.3

4) EL 3.0

5) JMS 2.0

6) JTA 1.2

7) JavaMail 1.6

8) Connector 1.7

9) Web Services 1.4

10) JAX-RS 2.1

11) WebSocket 1.1

12) JSON-P 1.1

13) JSON-B 1.0

14) Concurrency Utilities 1.0

15) Batch 1.0

16) Java EE Management 1.1

17) JACC 1.5

18) JASPIC 1.1

19) Java EE Security 1.0

20) JSP Debugging 1.0

21) JSTL 1.2

22) Web Services Metadata 2.1

23) JSF 2.3

24) Common Annotations 1.3

25) Java Persistence 2.2

26) Bean Validation 2.0

27) Managed Beans 1.0

28) Interceptors 1.2

29) Contexts and Dependency Injection for Java EE 2.0

30) Dependency Injection for Java 1.0

可选实现规范:

1) EJB 3.2 and earlier entity beans and associated EJB QL

2) JAX-RPC 1.1

3) JAXR 1.0

4) Java EE Deployment 1.2

企业级Tomcat:TomEE

TomEE,可对等看作企业级Tomcat,肯定是比作为Servlet容器的Tomcat更强大,简单的记住根本的一条:若无前者Tomcat的存在,则后者TomEE无从谈起。若Tomcat不是能满足你开发软件所要求的后端应用服务器,那你即可以考虑TomEE了

下面我们还是来更明确的梳理一下Tomcat和TomEE。

1 TomEE是Tomcat的升级版

将TomEE看作是Tomcat加上一些花哨的东西这样更容易理解一些,因为TomEE是构建在Tomcat之上的。具体来说,TomEE 8是完整的Tomcat 9发行版加上Jakarta EE 8(以前是Java EE 8)特定的API而来的,支持Java EE 8规范的企业级的应用服务器,包含更多的开箱即用的功能脚手架,让开发者更关注业务和应用,而不是技术本身。

Tomcat是一个功能强大且非常流行的Java Web服务器。它实现了四个Jakarta EE web规范。

  • Ÿ Jakarta WebSocket 1.1
  • Ÿ Jakarta Servlet 4.0
  • Ÿ Jakarta Expression Language 3.0
  • Ÿ Jakarta Server Pages 2.3

您可以使用Tomcat单独构建完整的动态web站点,但是Tomcat与Jakarta EE不是同义词。Tomcat本身甚至不能满足Jakarta EE 8 Web Profile(EE规范规范中的一个子集)的最低要求,但是TomEE确实以Jakarta EE 8 Web Profile为目标。TomEE 8扩展了Tomcat 9,并专注于Jakarta EE 8的需求实现。

注意:在2019年底时,TomEE 8已通过了Jakarta EE 8 Web Profile兼容性测试的96%。相信很快它将是100%兼容的。

 

2 TomEE 8中的Jakarta EE规范

那么TomEE所拥有的什么是Tomcat没有的呢?最新版本TomEE 8增加了很多Jakarta EE 8 Web Profile所需的企业技术,但在Tomcat中却没有,包括:

1) Jakarta EE Web Profile 8 (Targeted)

2) Jakarta JSON Processing 1.1

3) Jakarta JSON Binding Specification 1.0

4) Jakarta Server Faces 2.3

5) Jakarta Standard Tag Library

6) Jakarta Interceptors 1.2

7) Jakarta Batch 1.0

8) Jakarta Concurrency 1.1

9) Jakarta Contexts and Dependency Injection 2.0

10) Jakarta Annotations 1.3

11) Jakarta Bean Validation 2.0

12) Jakarta Enterprise Beans 3.2

13) Jakarta Connectors 1.7

14) Jakarta Persistence 2.2 (警告:基于openjpa的发行版提供了一个JPA 2.0运行时)

15) Jakarta Messaging 2.0 (layer based on ActiveMQ 5 / JMS 1.1 for default distributions- (基于ActiveMQ 5 / JMS 1.1的层,用于默认发行版))

16) Jakarta Transactions 1.3

17) Jakarta Security 1.0

18) Jakarta Authentication 1.1

19) Jakarta Mail 1.6 (NOTE: EE 7 requires 1.5)

20) Jakarta RESTful Web Services 2.1

21) Jakarta Managed Beans 1.0

22) Jakarta Enterprise Web Services 1.4

23) Jakarta Debugging Support for Other Languages 1.0

以上,你可以看作是TomEE8作为应用服务器或所中间件所具有的特性。

 

3 Jakarta EE:只使用你需要的

所有这些APIs都很重要,这取决于上下文,就像Java SE中的所有APIs都很重要,这取决于您需要什么。在Java SE中,如果您不想使用特定的API(例如Java.rmi),就不要使用它。没有额外的认知负荷,因为你可以专注于你所需要的,而忽略其他。Jakarta EE也是如此。实现中确实提供了很多,但你可以只专注于你需要的部分。你没必要知道所有的事情,你都可以忽略,直到你确实需要了解时采取研究就行了。

也就是说,如果没有您需要的东西,那么将它集成到项目中是很痛苦的,特别是在所有其他企业级APIs环境中。这就是Jakarta EE的优势所在。Jakarta EE平台的重点不是捆绑一堆不相关的api。Jakarta EE的目的是确保各种有用的企业APIs能和谐地一起发挥作用(可以聚合性的和平共处地工作)。

基于这样的应用服务器的支持,通常我们的企业级Java应用架构类似一下模式:

企业级Java标准体系及产品级服务器TomEE

企业级Java应用架构模式

我们的TomEE就是对应着服务器层。

4 TomEE 版本

TomEE本身有四种风格的产品版本,分别是TomEE、TomEE JAX-RS、TomEE +(TomEE Plus)和TomEE PluME。在下一篇文章中,我们将更多地讨论这些风格和Jakarta EE支持的版本,但是现在,你可以假定TomEE的任何版本至少都是针对Jakarta EE 8 Web Profile的要求的,或者说是满足Jakarta EE规范的某一子集要求。

这一部分内容,我们就简要说这些了。下一次,将来谈谈TomEE各个版的异同。

分享出去吧,顺手点个赞或收藏备查。谢谢。



Tags:Java   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  Tags: Java  点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  Tags: Java  点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Tags: Java  点击:(5)  评论:(0)  加入收藏
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === 'a') { b = true} else { b = false}// goodb = a === 'a'2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Tags: Java  点击:(6)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  Tags: Java  点击:(11)  评论:(0)  加入收藏
传统游戏项目一般使用TCP协议进行通信,得益于它的稳定和可靠,不过在网络不稳定的情况下,会出现丢包严重。不过近期有不少基于UDP的应用层协议,声称对UDP的不可靠进行了改造,这意...【详细内容】
2021-12-23  Tags: Java  点击:(12)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  Tags: Java  点击:(12)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  Tags: Java  点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  Tags: Java  点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  Tags: Java  点击:(19)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条