總要先爬出坑的JEE架構

本博客 貓叔的博客,轉載請申明出處

先來看看官網對它的定義。

Java平臺企業版(Java EE)是社區驅動的企業軟件的標準。Java EE是使用Java Community Process開發的,其中包括來自行業專家,商業和開源組織,Java用戶組以及無數個人的貢獻。每個版本都集成了符合行業需求的新功能,提高了應用程序的可移植性並提高了開發人員的工作效率
如今,Java EE的提供了豐富的企業軟件平臺,並與超過 20個兼容的Java EE實現可供選擇。

Java EE 8,你值得了解,起碼官網還提示了你它還在更新新的功能。

image

說到JEE,做web項目的朋友其實都有所瞭解,它將企業級軟件架構分爲三個層級,web層、業務邏輯層和數據存儲層

先看看圖,舊時代的輝煌!

image
先介紹一下:

WEB容器:給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接跟容器中的環境變量接口交互,不必關注其它系統問題。主要由WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規範中的WEB APPLICATION 標準。我們把遵守以上標準的WEB服務器就叫做J2EE中的WEB容器。同時,JEE 平臺將不同的模塊化組件聚合後運行在通用的應用服務器上,例WebLogi,WebSphere , JBoss 等,這也包含 Tomcat Tomcat 僅僅是實現了 JEE Web 規範的 Web 容器。

EJB容器:Enterprise java bean 容器。更具有行業領域特色。他提供給運行在其中的組件EJB各種管理功能。只要滿足J2EE規範的EJB放入該容器,馬上就會被容器進行高效率的管理。並且可以通過現成的接口來獲得系統級別的服務。例如郵件服務、事務管理。WEB容器和EJB容器在原理上是大體相同的,更多的區別是被隔離的外界環境。WEB容器更多的是跟基於HTTP的請求打交道。而EJB容器不是。它是更多的跟數據庫、其它服務打交道。但他們都是把與外界的交互實現從而減輕應用程序的負擔。例如SERVLET不用關心HTTP的細節,直接引用環境變量session,request,response就行、EJB不用關心數據庫連接速度、各種事務控制,直接由容器來完成。

可以看到每個層次的職責如下:

  • Web層:負責與用戶交互或者對外提供接口
  • 業務邏輯層:爲了實現業務邏輯而設計的流程處理和計算處理模塊
  • 數據存取層:將業務邏輯層處理的結果持久化以待後續查詢,並維護領域模型中對象的生命週期。

值得一提的是,JEE平臺是典型的二八原則的應用場景,它將 80%通用的與業務無關的邏輯和流程封裝在應用服務器的模塊化組件裏,通過配置的模式提供給應用程序訪問,應用程序實現 20%專用邏輯,並通過配置的形式來訪問應用服務器提供的模塊化組件。事實上,應用服務器提供的對象關係映射服務、數據持久服務、事務服務、安全服務、消息服務等通過簡單的配置即可在應用程序中使用。

JEE 時代的架構已經對企業級應用的整體架構進行了邏輯分層,包括上面提到的 Web 層、業務邏 和數據存取層,分別對應上圖中的 Web 容器、 JB 容器和數據存取 ORM 組件與數據持久層 (數據庫) 不同的層級有自己的職責,並從功能類型上劃分層級,每個層級的職責單一。

在分層架構下需要對項目管理過程中的團隊進行職責劃分,井建立團隊交流機制。根據康威定律,設計系統的組織時,最終產生的設計等價於組織的溝通結構 ,通俗來講,團隊的交流機制應該與架構分層交互機制相對應。由於在架構上把整體的單體系統分成具有不同職責的層級,對應的項目管理傾向於把大的團隊分成不同的職能團隊,主要包括:用戶 交互 UI 團隊、後臺業務邏輯處理團隊、 數據存取 ORM 團隊與 DBA 團隊等,每個團隊只對自己的職責負責,並對使用方提供組件服務質量保證。

讓我們在看看另一個經典,職能團隊劃分。

image
JEE通過對單體架構的分層,結合職能劃分,開始通過架構在一定程度上進行邏輯拆分,讓各個專業的人能更加高效的做他們應該做的事情。

但是,每個層次的多個業務邏輯的實現會被放在同一應用項目中,並且運行在同一個服務器上。儘管大多數公司會使用規範來約束不同業務邏輯的隔離性來解禍,但是久而久之,隨着複雜業務邏輯的選代增加及開發人員的不斷流動,新的程序員爲了節省時間和趕進度,非法使用了其他組件的服務,業務組件之間、 組件之間、數據存取之間的稿合性必然增加,最後導致組件與組件之間難以劃清界限,完全禍合在一起,將來的新功能迭代、增加和維護將難上加難。(反正你如果是入職接手一個老項目,那你一般都會很頭疼)

就當時而言,儘管 JEE 支持 Web容器和 EJB 容器的分離部署,大多數項目仍然部署在同 個應用服務器上井跑在一JVM 進程中。

說說你和JEE的那些事吧!

公衆號:Java貓說

學習交流羣:728698035

現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不定期乾貨。

Image Text

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章