J2EE架構是當前主流的架構之一,目前大多數企業採用J2EE技術的結構設計與解決方案。J2EE體繫結構提供中介層整合架構用來滿足無需太多費用而又需要高可用性、高可靠性以及可擴充性的應用的需求。通過提供統一的開發平台,J2EE降低了開發多層應用的費用和複雜性,同時提供對現有應用程式整合強有力支援,完全支援Enterprise JavaBeans,有良好的嚮導支援打包和部署應用,添加目錄支援,增強了安全機制,提高了效能。
高效的開發: J2EE允許公司把一些通用的、很繁瑣的服務端任務交給中介軟體供應商去完成。這樣開發人員可以集中精力在如何建立商業邏輯上,相應地縮短了開發時間。進階中介軟體供應商提供以下這些複雜的中介軟體服務:
狀態管理服務 -- 讓開發人員寫更少的代碼,不用關心如何管理狀態,這樣能夠更快地完成程式開發。
持久性服務 -- 讓開發人員不用對資料訪問邏輯進行編碼就能編寫應用程式,能產生更輕巧,與資料庫無關的應用程式,這種應用程式更易於開發與維護。
分布式共用資料對象CACHE服務 -- 讓開發人員編製高效能的系統,極大提高整體部署的伸縮性。
支援異構環境: J2EE能夠開發部署在異構環境中的可移植程式。基於J2EE的應用程式不依賴任何特定作業系統、中介軟體、硬體。因此設計合理的基於J2EE的程式只需開發一次就可部署到各種平台。這在典型的異構企業計算環境中是十分關鍵的。J2EE標準也允許客戶訂購與J2EE相容的第三方的現成的組件,把他們部署到異構環境中,節省了由自己制訂整個方案所需的費用。
延展性: 企業必須要選擇一種伺服器端平台,這種平台應能提供極佳的延展性去滿足那些在他們系統上進行商業運作的大批新客戶。基於J2EE平台的應用程式可被部署到各種作業系統上。例如可被部署到高端UNIX與大型主機系統,這種系統單機可支援64至256個處理器。J2EE領域的供應商提供了更為廣泛的Server Load Balancer策略。能消除系統中的瓶頸,允許多台伺服器整合部署。這種部署可達數千個處理器,實現可高度伸縮的系統,滿足未來商業應用的需要。
J2EE使用多層的分布式應用程式模型,應用邏輯按功能劃分為組件,各個應用組件根據他們所在的層分布在不同的機器上。傳統的J2EE多層企業級應用程式模型將兩層化模型中的不同層面切分成許多層。一個多層化應用能夠為不同的每種服務提供一個獨立的層,以下是 J2EE 典型的四層結構:
運行在用戶端機器上的客戶層組件
運行在J2EE伺服器上的Web層組件
運行在J2EE伺服器上的商務邏輯層組件
運行在EIS伺服器上的公司資訊系統(Enterprise information system)層軟體
通常認為,J2EE平台就廣泛的認為是這個架構,運行在J2EE伺服器上的EJB容器可以認為是此結構的核心,EJB容器管理著所有EJB的執行,以及EJB的生命週期,並且為EJB提供所有系統級的服務。EJB組件則負責接受,處理WEB容器的客戶請求和串連提供整個企業使用的資料,服務的EIS層。
此“經典”架構中,所有的資料訪問都要通過entity bean,業務對象都是帶遠程介面的無狀態session bean,運行在EJB容器中。EJB中包含了各種服務(比如聲明式的交易管理),而且提供了一個共用的中介層,可支援可支援各種類型的J2EE用戶端。但結構中應用效能和開發開銷的負擔很重,一些負載來在於EJB,而很大還是與分布式架構的特性有關。此外為了分布化,犧牲了OO原則,並且難以測試,因為商務邏輯通常編寫在EJB的實作類別中,而這些類完全依賴於EJB容器的。
此“經典”架構的一種改進,便是把遠程EJB替換為本地EJB,實現了架構的重用,解決了分布化的種種問題。但架構還是相當的複雜。EJB的很多負擔還是存在,從EJB中獲得益處反而不多。
所以隨著企業級應用開發的不斷複雜,對架構設計的要求也會提出新的要求:
架構簡單,但功能強大。
架構可以通過配置WEB容器叢集來達到橫向擴充。
在不同的應用伺服器之間具有高移植性。
便於在應用伺服器之外進行業務對象的單元測試,而且,一些整合測試甚至可以讓一些輕量級容器(如Junit)來完成。
為瞭解決經典架構中有EJB引起的一系列問題以及滿足不斷髮展的公司專屬應用程式,提出了非EJB架構的“輕量級容器”。輕量級容器與EJB架構都是有容器管理商務服務對象,然後再圍繞著這個服務層組織整個架構。但是業務對象不是運行在EJB容器中,而是運行在“輕量級容器”中。輕量級容器並沒有和J2EE綁定,所以它既可以運行在WEB容器裡,也可以在一個標準應用程式中運行,如必要也可以運行在EJB容器中。這個容器也沒有和servlet API綁定?D?D這一點與MVC結構的WEB架構不同。輕量級容器的啟動開銷很小,而且無需EJB的部署。
輕量級容器提供了一種管理、定位業務對象的辦法。用不著JNDI定址、定製伺服器之類的額外輔助;輕量級容器為應用對象提供註冊服務。其較之EJB容器而言,不僅功能強大,而且避免了容器強制業務對象採用特定的介面,最低程度的降低了侵入性,實現了效果極佳的架構重用。
輕量級容器中所有的Java類都運行在同一個虛擬機器中。
WEB層是由MVC架構提供的(Struts或WebWork,或Spring架構的MVC結構)
業務對象是POJO,運行在輕量級容器裡。AOP的攔截機制能夠增強業務對象,從而實現企業級服務。與EJB容器不同,業務對象不依賴於容器的API,所以這些對象在容器外也可以使用,更利於單元測試。業務對象僅僅通過介面來訪問,當更改具體業務對象的實作類別後,業務對象無需修改。實現了面向介面編程。
資料訪問機制可以通過輕量級的O/R Mapping,該層能提供透明的持久化,該持久層實現了對資料訪問方式JDBC的輕量級封裝。