1. 程式人生 > >J2EE的體系架構

J2EE的體系架構

J2EE 即Java2平臺企業版,它提供了基於元件的方式來設計、開發、組裝和部署企業應用。J2EE使用多層分散式的應用模型,這個多層通常通過三層或四層來實現:

         1、客戶層,執行在客戶計算機上的元件。
         2、Web 層,執行在J2EE伺服器上的元件。
         3、業務層,同樣是執行在J2EE伺服器上的元件。
         4、企業資訊系統層(EIS),是指執行在EIS伺服器上的軟體系統。
      
         以上層次一般也指三層應用,因分佈在三個不同位置:客戶計算機、J2EE伺服器及後臺的資料庫或過去遺留下來的系統。請看圖例:           

       J2EE元件

         J2EE應用程式是由元件構成的。J2EE元件是一個封裝了功能的軟體單元,能夠與相關的一些類和檔案一起組成J2EE應用程式。
         1、應用程式客戶端和Applet是指執行在客戶計算機上的元件。
         2、基於Java Servlet和JSP技術的元件叫Web元件,它們執行在伺服器上。
         3、企業JavaBean(EJB)元件叫業務元件,同樣執行在伺服器上。

      J2EE客戶端

         J2EE客戶端可以是一個Web元件或者是一個應用程式客戶端。
         1、Web客戶端  
         包括兩部分,首先是那些動態Web頁面(HTML、XML等),這些元件執行在Web層;另一個是Web瀏覽器,由客戶機上的瀏覽器從伺服器接收並且解析和顯示Web頁面。
         2、小應用程式(Applet) 
         需要執行在客戶端安裝了Java虛擬機器的Web瀏覽器上。
         3、應用程式客戶端
         J2EE應用程式客戶端執行在客戶機上,能提供強大而靈活易用的使用者介面,如使用Swing或AWT建立的圖形化的使用者介面(GUI)。應用程式可直接訪問執行在業務層的企業Bean,如果需求允許,也可以開啟HTTP連線來建立與執行在Web層上的Servlet之間的通訊。
         4、JavaBean元件架構
         在伺服器和客戶端兩層中也可能包括了基於JavaBean的元件架構,通過JavaBean來實現資料的流動,可以是在應用程式客戶或Applet與執行在J2EE伺服器上的元件之間,或者是在J2EE伺服器和後臺資料庫之間。(不過JavaBean元件並沒有包含在J2EE規範裡)
         5、J2EE服務的通訊
         客戶層與J2EE伺服器上執行的業務層之間的通訊可以是直接的,也可以通過執行在Web層中的Servlet和JSP來實現,在這種情況下,客戶執行在瀏覽器中。

         Web元件


         J2EE的Web元件可以是Servlet或JSP頁面。在應用程式組裝過程中,靜態HTML頁面和Applet也可以一起打包成Web元件,但這並不是J2EE規範所認可的Web元件。

         業務元件

         業務程式碼是指那些由位於業務層的企業Bean(EJB)執行的邏輯,它們能夠解決或滿足特定的商業領域的一些需求。有三種不同型別的企業Bean:會話Bean、實體Bean和訊息驅動Bean。會話Bean代表客戶一次短暫的會話過過程,當客戶執行完成後,會話Bean以及它所包含的資料也隨之消失。實體Bean代表的是持久的資料,即儲存在資料庫表中的一行記錄,即使客戶終止或者伺服器關閉,在J2EE底層的會服務確保實體Bean的資料被儲存下來。

         企業資訊系統層


         企業資訊系統層處理企業資訊系統的軟體,包括企業組織結構系統,例如企業資源計劃(ERP)、大型的事務處理、資料庫系統及其他歷史上遺留下來的資訊系統。

歸納幾個概念:

 EJB


         即Enterprise JavaBean,一種元件架構,用於開發和部署面向物件的、分散式的、企業級的應用程式。所開發的應用程式使用EJB架構來實現可擴充套件性及管理事務和安全。
         EJB包括會話Bean(session bean)、實體Bean(entity bean)和訊息驅動Bean(message-driven bean)。其中會話Bean分為無狀態會話Bean(stateless session bean)和有狀態會話Bean(stateful session bean)。而實體Bean又分為Bean管理實體Bean和容器管理實體Bean。由於這種Bean對應於資料庫中的記錄,所以資料庫記錄的任何改變也被同步到元件池中的相關Bean中,這個過程叫做永續性(persistenced),這是實體Bean最重要的一個特徵。根據永續性操作方式的不同分為:容器管理永續性(Container-Managed Persistence,CMP)和Bean管理永續性(Bean-Managed Persistence,BMP)。

容器

         即container,一個實體,它管理著元件的生命週期、安全、部署和執行時服務。每個型別的容器都只提供與相應型別的元件相關的服務,如EJB、Web、JSP、Applet和應用程式客戶端。其中,EJB容器和Web容器都執行在J2EE伺服器中。

J2EE

         即Java 2 Platform Enterprise Edition,Java 2 平臺企業版。是開發和部署企業應用程式的一種平臺或環境。它由一系列服務、應用程式程式設計介面(API)、提供多層開發的功能性的協議以及基於Web的應用程式組成。

目前,Java 2平臺有3個版本,它們是適用於小型裝置和智慧卡的Java 2平臺Micro版(Java 2 Platform Micro Edition,J2ME)、適用於桌面系統的Java 2平臺標準版(Java 2 Platform Standard Edition,J2SE)、適用於建立伺服器應用程式和服務的Java 2平臺企業版(Java 2 Platform Enterprise Edition,J2EE)。

J2EE是一種利用Java 2平臺來簡化企業解決方案的開發、部署和管理相關的複雜問題的體系結構。J2EE技術的基礎就是核心Java平臺或Java 2平臺的標準版,J2EE不僅鞏固了標準版中的許多優點,例如"編寫一次、隨處執行"的特性、方便存取資料庫的JDBC API、CORBA技術以及能夠在Internet應用中保護資料的安全模式等等,同時還提供了對 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技術的全面支援。其最終目的就是成為一個能夠使企業開發者大幅縮短投放市場時間的體系結構。

J2EE體系結構提供中間層整合框架用來滿足無需太多費用而又需要高可用性、高可靠性以及可擴充套件性的應用的需求。通過提供統一的開發平臺,J2EE降低了開發多層應用的費用和複雜性,同時提供對現有應用程式整合強有力支援,完全支援Enterprise JavaBeans,有良好的嚮導支援打包和部署應用,新增目錄支援,增強了安全機制,提高了效能。

J2EE為搭建具有可伸縮性、靈活性、易維護性的商務系統提供了良好的機制:

  1. 保留現存的IT資產: 由於企業必須適應新的商業需求,利用已有的企業資訊系統方面的投資,而不是重新制定全盤方案就變得很重要。這樣,一個以漸進的(而不是激進的,全盤否定的)方式建立在已有系統之上的伺服器端平臺機制是公司所需求的。J2EE架構可以充分利用使用者原有的投資,如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及Netscape Application Server。這之所以成為可能是因為J2EE擁有廣泛的業界支援和一些重要的'企業計算'領域供應商的參與。每一個供應商都對現有的客戶提供了不用廢棄已有投資,進入可移植的J2EE領域的升級途徑。由於基於J2EE平臺的產品幾乎能夠在任何作業系統和硬體配置上執行,現有的作業系統和硬體也能被保留使用。
  2. 高效的開發: J2EE允許公司把一些通用的、很繁瑣的服務端任務交給中介軟體供應商去完成。這樣開發人員可以集中精力在如何建立商業邏輯上,相應地縮短了開發時間。高階中介軟體供應商提供以下這些複雜的中介軟體服務:
    • 狀態管理服務 -- 讓開發人員寫更少的程式碼,不用關心如何管理狀態,這樣能夠更快地完成程式開發。
    • 持續性服務 -- 讓開發人員不用對資料訪問邏輯進行編碼就能編寫應用程式,能生成更輕巧,與資料庫無關的應用程式,這種應用程式更易於開發與維護。
    • 分散式共享資料物件CACHE服務 -- 讓開發人員編制高效能的系統,極大提高整體部署的伸縮性。
  3. 支援異構環境: J2EE能夠開發部署在異構環境中的可移植程式。基於J2EE的應用程式不依賴任何特定作業系統、中介軟體、硬體。因此設計合理的基於J2EE的程式只需開發一次就可部署到各種平臺。這在典型的異構企業計算環境中是十分關鍵的。J2EE標準也允許客戶訂購與J2EE相容的第三方的現成的元件,把他們部署到異構環境中,節省了由自己制訂整個方案所需的費用。
  4. 可伸縮性: 企業必須要選擇一種伺服器端平臺,這種平臺應能提供極佳的可伸縮性去滿足那些在他們系統上進行商業運作的大批新客戶。基於J2EE平臺的應用程式可被部署到各種作業系統上。例如可被部署到高階UNIX與大型機系統,這種系統單機可支援64至256個處理器。(這是NT伺服器所望塵莫及的)J2EE領域的供應商提供了更為廣泛的負載平衡策略。能消除系統中的瓶頸,允許多臺伺服器整合部署。這種部署可達數千個處理器,實現可高度伸縮的系統,滿足未來商業應用的需要。
  5. 穩定的可用性: 一個伺服器端平臺必須能全天候運轉以滿足公司客戶、合作伙伴的需要。因為INTERNET是全球化的、無處不在的,即使在夜間按計劃停機也可能造成嚴重損失。若是意外停機,那會有災難性後果。J2EE部署到可靠的操作環境中,他們支援長期的可用性。一些J2EE部署在WINDOWS環境中,客戶也可選擇健壯效能更好的作業系統如Sun Solaris、IBM OS/390。最健壯的作業系統可達到99.999%的可用性或每年只需5分鐘停機時間。這是實時性很強商業系統理想的選擇。

這種基於元件,具有平臺無關性的J2EE 結構使得J2EE 程式的編寫十分簡單,因為業務邏輯被封裝成可複用的元件,並且J2EE 伺服器以容器的形式為所有的元件型別提供後臺服務. 因為你不用自己開發這種服務, 所以你可以集中精力解決手頭的業務問題.

容器和服務 
容器設定定製了J2EE伺服器所提供得內在支援,包括安全,事務管理,JNDI(Java Naming and Directory Interface)定址,遠端連線等服務,以下列出最重要的幾種服務:

  • J2EE安全(Security)模型可以讓你配置 web 元件或enterprise bean ,這樣只有被授權的使用者才能訪問系統資源. 每一客戶屬於一個特別的角色,而每個角色只允許啟用特定的方法。你應在enterprise bean的佈置描述中宣告角色和可被啟用的方法。由於這種宣告性的方法,你不必編寫加強安全性的規則。
  • J2EE 事務管理(Transaction Management)模型讓你指定組成一個事務中所有方法間的關係,這樣一個事務中的所有方法被當成一個單一的單元. 當客戶端啟用一個enterprise bean中的方法,容器介入一管理事務。因有容器管理事務,在enterprise bean中不必對事務的邊界進行編碼。要求控制分散式事務的程式碼會非常複雜。你只需在佈置描述檔案中宣告enterprise bean的事務屬性,而不用編寫並除錯複雜的程式碼。容器將讀此檔案併為你處理此enterprise bean的事務。
  • JNDI 定址(JNDI Lookup)服務向企業內的多重名字和目錄服務提供了一個統一的介面,這樣應用程式元件可以訪問名字和目錄服務.
  • J2EE遠端連線(Remote Client Connectivity)模型管理客戶端和enterprise bean間的低層互動. 當一個enterprise bean建立後, 一個客戶端可以呼叫它的方法就象它和客戶端位於同一虛擬機器上一樣.
  • 生存週期管理(Life Cycle Management)模型管理enterprise bean的建立和移除,一個enterprise bean在其生存週期中將會歷經幾種狀態。容器建立enterprise bean,並在可用例項池與活動狀態中移動他,而最終將其從容器中移除。即使可以呼叫enterprise bean的create及remove方法,容器也將會在後臺執行這些任務。
  • 資料庫連線池(Database Connection Pooling)模型是一個有價值的資源。獲取資料庫連線是一項耗時的工作,而且連線數非常有限。容器通過管理連線池來緩和這些問題。enterprise bean可從池中迅速獲取連線。在bean釋放連線之可為其他bean使用。

容器型別 
J2EE應用元件可以安裝部署到以下幾種容器中去:

  • EJB 容器管理所有J2EE 應用程式中企業級bean 的執行. enterprise bean 和它們的容器執行在J2EE 伺服器上.
  • Web 容器管理所有J2EE 應用程式中JSP頁面和Servlet元件的執行. Web 元件和它們的容器執行在J2EE 伺服器上.
  • 應用程式客戶端容器管理所有J2EE應用程式中應用程式客戶端元件的執行. 應用程式客戶端和它們的容器執行在J2EE 伺服器上.
  • Applet 容器是執行在客戶端機器上的web瀏覽器和 Java 外掛的結合.


______________________________________________________________________________

J2EE平臺由一整套服務(Services)、應用程式介面(APIs)和協議構成,它對開發基於Web的多層應用提供了功能支援,下面對J2EE中的13種技術規範進行簡單的描述(限於篇幅,這裡只能進行簡單的描述):

  1. JDBC(Java Database Connectivity): JDBC API為訪問不同的資料庫提供了一種統一的途徑,象ODBC一樣,JDBC對開發者遮蔽了一些細節問題,另外,JDCB對資料庫的訪問也具有平臺無關性。
  2. JNDI(Java Name and Directory Interface): JNDI API被用於執行名字和目錄服務。它提供了一致的模型來存取和操作企業級的資源如DNS和LDAP,本地檔案系統,或應用伺服器中的物件。
  3. EJB(Enterprise JavaBean): J2EE技術之所以贏得某體廣泛重視的原因之一就是EJB。它們提供了一個框架來開發和實施分散式商務邏輯,由此很顯著地簡化了具有可伸縮性和高度複雜的企業級應用的開發。EJB規範定義了EJB元件在何時如何與它們的容器進行互動作用。容器負責提供公用的服務,例如目錄服務、事務管理、安全性、資源緩衝池以及容錯性。但這裡值得注意的是,EJB並不是實現J2EE的唯一途徑。正是由於J2EE的開放性,使得有的廠商能夠以一種和EJB平行的方式來達到同樣的目的。
  4. RMI(Remote Method Invoke): 正如其名字所表示的那樣,RMI協議呼叫遠端物件上方法。它使用了序列化方式在客戶端和伺服器端傳遞資料。RMI是一種被EJB使用的更底層的協議。
  5. Java IDL/CORBA: 在Java IDL的支援下,開發人員可以將Java和CORBA整合在一起。他們可以建立Java物件並使之可在CORBA ORB中展開, 或者他們還可以建立Java類並作為和其它ORB一起展開的CORBA物件的客戶。後一種方法提供了另外一種途徑,通過它Java可以被用於將你的新的應用和舊的系統相整合。
  6. JSP(Java Server Pages): JSP頁面由HTML程式碼和嵌入其中的Java程式碼所組成。伺服器在頁面被客戶端所請求以後對這些Java程式碼進行處理,然後將生成的HTML頁面返回給客戶端的瀏覽器。
  7. Java Servlet: Servlet是一種小型的Java程式,它擴充套件了Web伺服器的功能。作為一種伺服器端的應用,當被請求時開始執行,這和CGI Perl指令碼很相似。Servlet提供的功能大多與JSP類似,不過實現的方式不同。JSP通常是大多數HTML程式碼中嵌入少量的Java程式碼,而servlets全部由Java寫成並且生成HTML。
  8. XML(Extensible Markup Language): XML是一種可以用來定義其它標記語言的語言。它被用來在不同的商務過程中共享資料。XML的發展和Java是相互獨立的,但是,它和Java具有的相同目標正是平臺獨立性。通過將Java和XML的組合,您可以得到一個完美的具有平臺獨立性的解決方案。
  9. JMS(Java Message Service): MS是用於和麵向訊息的中介軟體相互通訊的應用程式介面(API)。它既支援點對點的域,有支援釋出/訂閱(publish/subscribe)型別的域,並且提供對下列型別的支援:經認可的訊息傳遞,事務型訊息的傳遞,一致性訊息和具有永續性的訂閱者支援。JMS還提供了另一種方式來對您的應用與舊的後臺系統相整合。
  10. JTA(Java Transaction Architecture): JTA定義了一種標準的API,應用系統由此可以訪問各種事務監控。
  11. JTS(Java Transaction Service): JTS是CORBA OTS事務監控的基本的實現。JTS規定了事務管理器的實現方式。該事務管理器是在高層支援Java Transaction API (JTA)規範,並且在較底層實現OMG OTS specification的Java映像。JTS事務管理器為應用伺服器、資源管理器、獨立的應用以及通訊資源管理器提供了事務服務。
  12. JavaMail: JavaMail是用於存取郵件伺服器的API,它提供了一套郵件伺服器的抽象類。不僅支援SMTP伺服器,也支援IMAP伺服器。
  13. JTA(JavaBeans Activation Framework): JavaMail利用JAF來處理MIME編碼的郵件附件。MIME的位元組流可以被轉換成Java物件,或者轉換自Java物件。大多數應用都可以不需要直接使用JAF。