導引
作為當前業界最成熟的編程語言的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標準體系構成,總體可以參照如下架構模型來加以理解:
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 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就是對應著服務器層。
4 TomEE 版本
TomEE本身有四種風格的產品版本,分別是TomEE、TomEE JAX-RS、TomEE +(TomEE Plus)和TomEE PluME。在下一篇文章中,我們將更多地討論這些風格和Jakarta EE支持的版本,但是現在,你可以假定TomEE的任何版本至少都是針對Jakarta EE 8 Web Profile的要求的,或者說是滿足Jakarta EE規范的某一子集要求。
這一部分內容,我們就簡要說這些了。下一次,將來談談TomEE各個版的異同。
分享出去吧,順手點個贊或收藏備查。謝謝。