中間件的主要功能如下:
◆ 負責客戶機和服務器間的聯接和通信;
◆ 提供客戶機與應用層的高效率通訊機制;
◆ 提供應用層不同服務之間的互操作機制;
◆ 提供應用層與數據庫之間的聯接和控制機制;
◆ 提供一個三層結構應用開發和運行的平臺;
◆ 提供一個應用開發框架,支持模塊化的應用開發;
◆ 屏蔽硬件、操作系統、網絡和數據庫;
◆ 提供交易管理機制,保證交易的一致性;
◆ 提供應用的負載均衡和高可用性;
◆ 提供應用的安全機制與管理功能。
中間件的分類與發展趨勢
中間件的分類
中間件產品出現在20世紀70年代,消息通信和事務管理是其最初具有的功能。到了90年代,隨著互聯網的普及和企業計算的需要,對于中間件的需求也逐漸多樣化,從而促使中間件技術進一步細分,產生了不同類別的中間件產品。90年代中間件習慣上分為5大類,分別是消息中間件、數據訪問中間件、遠程過程調用中間件、對象請求代理中間件和事務處理中間件。從90年代末期開始,隨著電子商務的興起和企業信息化建設的深入,中間件受不同類型需求的刺激而更加豐富起來,中間件的內涵和外延進一步拓展。面向對象的中間件技術成為中間件平臺的主流技術,出現了以Sun公司的EJB/J2EE、Microsoft的COM+/DNA和OMG的CORBA/OMA為代表的三個技術分支。其研究熱點是建立標準化的對象請求代理,屏蔽網絡環境下計算平臺、操作系統、編程語言、網絡協議的異構性和復雜性,使分布在網絡上的應用系統能夠協同工作,為網絡應用提供通用的高級網絡管理服務及與應用領域相關的增值服務。
由于中間件技術的發展和變化,學術界和產業界對中間件技術重新進行了分類,這些類別分別是通信中間件(Communication Middleware)、應用服務器(Application Server)、數據集成中間件(Data Integrator)、應用集成中間件(Application Integrator)、流程集成中間件(Business Process Management)和B2B應用集成中間件(B2B Application Integrator)。其中,僅僅通信中間件一個類別就基本涵蓋了傳統中間件的所有類別。
從廣義上看,商務應用包括三個邏輯層次:表示層邏輯、業務邏輯和基礎邏輯。其中,基礎邏輯貫穿了通信、事件和應用管理三個方面。換言之,中間件就是從應用中分離出來的、基礎邏輯的一種獨立標準形式。
從應用類別來看,中間件可以分為三大類:
◆ 數據類(Data Integration) 用于數據的存取、轉換和增值,此類中間件用于構建以數據為中心的應用;
◆ 處理類(Process Integration) 把分布在網絡結點上的各個應用或處理連接在一起,形成一個統一的分布式應用;
◆ 分布式構件類(Distributed Components)支持構件式應用,是未來應用的發展方向。
從應用層次來看,中間件可以歸納為三種模式(見圖2):
◆ 消息傳輸模式 將數據從不同的源發地采集到一起或轉發,包括數據標記、加密、隊列和審核等;
◆ 事務協調模式 支持應用事件及交易管理;
◆ 應用構件模式 支持構件式應用,是網絡化應用的發展趨勢。
中間件的發展趨勢
中間件作為構筑企業信息系統和電子商務系統的基石和核心技術,向著標準化和構件化方向發展。具體來看,有以下三種發展趨勢:
1. 規范化
在中間件的發展過程中,做得最好的一件事情就是規范的制定。對于不同類型的中間件,目前都有一些規范可以遵循,如消息類的JMS,對象類的CORBA和COM/DCOM,交易類的XA、OTS、JTA/JTS,應用服務器類的J2EE,數據訪問類的ODBC和JDBC,Web服務有SOAP、WSDL、UDDI等。這些規范的建立極大地促進了中間件技術的發展,同時保證了系統的擴展性、開放性和互操作。
2. 構件化和松耦合
除了已經得到較為普遍應用的CORBA、DCOM等適應Intranet的構件技術外,隨著企業業務流程整合和電子商務應用的發展,中間件技術朝著面向Web、松散耦合的方式發展?;赬ML和Web服務的中間件技術,使得不同系統之間、不同應用之間的交互建立在非常靈活的基礎上。XML是一種可擴展的源標識語言,它提供了一種定義新的標識語言標準。XML技術非常適合于異構系統間的數據交換,因此在國際上已經被普遍采納為電子商務的數據標準。而Web服務作為基于Web技術的構件,在流程中間件的控制和集成下可以靈活、動態地被組織成為跨企業的商務應用。
3. 平臺化
J2EE中間件技術
J2EE體系
J2EE是應用服務器采用的主要技術體系,與其它的中間件系統相比較,它具有非常顯著的特征,這些特征來自于它獨特的體系結構。
企業現在需要通過為他們的客戶、合作伙伴、雇員和供應商提供更加便捷的服務來擴大它們的市場、降低它們的成本及縮短它們的響應時間。在許多情況下,可以使用的應用程序必須將現有的企業信息系統與可以為更多的客戶提供服務的新業務功能結合起來,這些服務需要:
◆ 高可用性,可以適應當今全球商業環境;
◆ 安全性,可以保護客戶的隱私和企業數據的完整性;
◆ 可靠性和伸縮性,保證事務處理的準確性和及時性。
由于多種原因,這些服務功能需要構筑成有多個層次組成的分布式系統,包括前端的客戶端、后端的數據資源端和一個或多個中間層,這個中間層也是開發工作的重點,它實現了新的服務功能和數據與現有業務管理系統的結合。這個中間層將客戶層分離出復雜的企業系統,采用先進的Internet技術,以減少對客戶的管理和培訓。
Java 2平臺企業版(J2EE)降低了開發這些服務功能的成本和復雜性,使服務可以迅速部署,以增強企業回應競爭壓力的能力。J2EE通過以下一些元素定義出一個標準:
◆ J2EE平臺 一個用于搭建J2EE的多個應用的平臺,定義了一組必要的API和策略;
◆ J2EE兼容性測試套裝 一套用于測試J2EE平臺產品與J2EE標準兼容性的測試;
◆ J2EE參考實現 一組顯示J2EE能力的參考實現,也是J2EE平臺的選擇性定義;
◆ J2EE設計方針 這個設計方針描述了用于開發中間層、瘦客戶應用的標準編程模式。
傳統的企業信息系統提供者為滿足客戶的需要,開始將兩層的客戶/服務器模式轉變成更靈活的三層和多層應用模式。新模式將業務邏輯從系統服務功能和用戶界面中分離出去,放置在這兩層之間的中間層。多層應用簡化了企業應用系統的開發、部署和維護。它使開發人員專著于用程序去實現業務邏輯,同時依賴于各種各樣的后端服務程序實現基礎結構和客戶端應用程序,以便用戶進行交互操作。一旦開發完成,業務邏輯可以部署到服務器上實現現存組織機構的需求。Sun公司用J2EE技術實現了這一設想。首先,Java Servlet技術允許開發人員創建支持Java平臺的、可以在任何Web服務器上運行的、像CGI一樣的操作界面。其次,JDBC技術將“寫一次,在任何地方運行”的Java編程的功能,與現存數據庫管理系統相結合。最后,企業級Java Bean組件結構將完整的一組企業應用邏輯壓縮到一個易于配置、可隨時重用組件。由于覆蓋了這樣三個概念:服務端界面用Java編寫;可以聯接現有的數據庫系統;模塊化、易于部署的組件,使我們趨向于J2EE標準。
J2EE應用模型
為了更好地控制和管理這些應用,支持各種用戶的業務功能被連接到中間層,中間層代表著一個被企業信息技術部門緊密控制著的環境。中間層被指定運行在特定的服務器硬件上,并可以涉及企業所有的服務。
J2EE應用模式定義了用于以多層的方式實現應用的一種結構,它避免了兩層結構的局限性,并提供足夠的可伸縮性、可接入性和可管理性。
J2EE應用方式將實現多層服務所需要進行的工作分成兩個部分,即為J2EE提供標準的系統服務—業務和表示邏輯。由開發人員完成業務和表示邏輯,開發人員可以依靠這個平臺提供的開發中間層服務來解決實現硬件層的方案。
J2EE應用模式具有可以執行性和可伸縮性,為多層應用程序提供了“寫一次就可在任何地方運行”的優勢。在充分選擇提供給企業的J2EE服務器和開發工具的情況下,這種標準化的模式將開發和培訓的成本降到最低。
J2EE應用模式通過降低建造多層應用復雜性,向應用開發的簡單化和可擴展化前進了一大步。
中間層
使用J2EE應用模式的主要優點在于多層應用的中間層。在J2EE平臺,中間層業務功能是由企業Java Bean(EJB)組件實現。這些企業Bean讓服務開發者將精力集中在業務邏輯,并讓EJB服務的處理提供可靠、可伸縮服務的復雜工作。EJB組件將業務邏輯在中間層實現,如下圖4所示。
Java Server Pages(JSP)技術和Servlet是使用Internet模式為客戶層表現中間層的功能。JSP技術使用戶界面開發工作變得容易,可以為瀏覽器提供頁面的動態生成技術。Servlet給以Java技術為基礎的應用程序開發者提供了一種手段,可以用Java語言完整地實現動態表示。
客戶層
J2EE平臺支持幾種類型的客戶端。許多J2EE服務被設計成支持Web瀏覽器的客戶端。這些服務通過動態生成的HTML頁面和表格與客戶端進行交互操作。
更復雜的服務將直接與第一層客戶端直接交換數據。這里,JSP和Servlet用于規格化業務數據,以方便J2EE客戶端處理。這些客戶端既能在一個Web瀏覽器以Java Applet方式運行,也能用以Java技術為基礎的程序方式運行。
企業信息系統
一個服務的中間層的業務模塊必須存取和更新在企業應用系統EIS層的信息。下列標準是Java服務的API,它們提供了對企業信息系統的基本存取功能:
◆ JDBC,用于存取數據的Java標準API;
◆ JNDI(Java Naming and Directory Interface),用于從企業的名字和目錄服務存取信息的標準API;
◆ JMS(Java Message Service),通過消息中間件發送和接收信息的標準API;
◆ JavaMail,發送電子郵件的標準API;
◆ JavaIDL,調用CORBA服務的標準API。
J2EE應用服務器中間件的體系結構
J2EE應用服務器總體結構
J2EE應用服務器由四個部分組成:Applet容器、應用客戶端容器、Web容器和EJB容器,它們之間的關系由圖5表示。但是,圖5所表示的是各個部件間的邏輯結構,這并不意味著這些部件必須物理地被分布在不同的機器上、不同的處理器上、不同的地址空間中和不同的虛擬機上。
容器是應用服務器的運行環境,J2EE為容器中的應用組件提供服務,每種容器根據各自的應用組件不同,提供不同類型的服務。它們涉及到各個方面,為組件的運行提供必要的支持。但是,不同容器中相同的服務為應用組件提供的接口是相同的。圖5中的箭頭表示了對于應用服務器的其它部分的存取。應用客戶端容器通過用于連接數據庫系統的Java API、JDBC API與應用服務器要求的數據庫相連接。包含有JSP和Servlet的Web容器和EJB容器也使用同樣的接口與數據庫相連接。容器中的每種組件都由J2SE的運行環境提供支持。
在J2EE應用服務器中,支持以下一些組件的運行:
1.應用客戶端可以在臺式電腦上執行具有GUI界面的、用Java語言編寫的程序。應用客戶端提供了與原有的應用程序相似的軟件運行形態,并且可以對所有中間層的功能進行存取。
2.Applets可以在Web瀏覽器上運行具有圖形界面的組件。它還可以在各種各樣的、支持Applet編程模式的應用系統或設備上運行。
3.Servlets、JSP頁面、過濾器和Web事件監聽在Web服務器內運行,并對Web客戶端的HTTP請求做出應答。Servlet、JSP頁面和過濾器用于生成作為應用系統用戶界面的HTML頁面。它們也可以生成被其它應用組件使用的XML和其它格式的數據。
4.EJB組件在一個支持事務處理的管理環境中執行。它一般包含了一個J2EE應用的業務邏輯。
J2EE應用服務器為應用組件的部署、管理和執行提供了支持。根據對應用服務器的依賴程度,應用組件可以被分成3種類型:
1.在應用服務器中被部署、管理和執行的組件,這樣的組件有Web組件和EJB組件。
2.在應用服務器中被部署、管理,但是被下載到一個客戶端系統上去執行的組件。
3.不完全按照應用服務器的要求被部署和管理的組件,應用客戶端就是這樣的組件。
J2EE應用服務器體系結構
J2EE應用服務器由松藕合構件組成,它們協調工作,使多層應用在高性能環境里運行。所有構件都有良好定義的公共接口集和標準實現。這意味著不影響現有應用就可以實現對構件的修改和擴展。為了滿足消費者或產品的需要,這種松藕合模型允許開發者修改應用服務器的行為。
從圖6看出,應用服務器的核心是基于微內核的。應用服務器的微內核提供了底層的通信、線程、配置、時間、日志等核心功能。在微內核之上,遵循J2EE標準實現各種服務。應用在這種微內核的設計模式,使上層標準的服務實現與底層的系統資源管理分離,保持了軟件模塊間松散耦合的優點。同時,應用服務器還提供了專門的服務接口,允許客戶不必局限在J2EE的框架中,直接在內核層次上開發針對于具體案例的系統服務,特別適合于有特殊需求的應用系統。
J2EE應用組件
J2EE應用組件是指在應用服務器中運行的軟件組件,主要有JSP、EJB和Servlet三種。
◆ JSP
JSP(Java Server Page) 提供了一種在網頁中嵌入組件的方式,并且允許生成相應的網頁最終發送給客戶。JSP網頁可以包含HTML、Java代碼及JavaBean組件。JSP網頁實際上是Servlet編程模型的一個擴充。當用戶請求一個JSP網頁時,Web容器會把相應的JSP網頁編譯成一個Servlet。接著此Web容器調用這個Servlet,并且把得到的內容返回給Web瀏覽器。從JSP網頁編譯出Servlet之后,Web容器就可以簡單地把這個Servlet返回,而不需要每次都重新編譯。因此,JSP網頁提供了一種功能強大的動態網頁裝配機制,可以從Java系統平臺的許多優點中獲益。
與純Java代碼構成的Servlet相比,JSP網頁只是基于文本的文檔,直到Web容器把它們編譯成相應的Servlet為止。這樣在應用程序邏輯與表示邏輯之間就有了清楚的分界。這種情況進而使應用程序開發者能夠集中注意力于業務細節,而讓Web設計者集中注意力于信息的表示。
JSP與Microsoft的ASP技術非常相似。兩者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。但是,ASP的編程語言是VBScript之類的腳本語言,JSP使用的是Java,這是兩者最明顯的區別。此外,ASP與JSP還有一個更為本質的區別:兩種語言引擎用完全不同的方式處理頁面中嵌入的程序代碼。在ASP下,VBScript代碼被ASP引擎解釋執行;在JSP下,代碼被編譯成Servlet并由Java虛擬機執行。
總之,JSP規范是Web服務器、應用服務器、交易系統及開發工具供應商之間廣泛合作的結果,它在多方面加速了動態頁面的開發。
◆ Servlet
Servlet是一個以Java技術為基礎的Web組件,它被一個容器管理,它能產生動態的內容。像其它以Java為基礎的組件一樣,Servlet是獨立于各種平臺的Java類,它能夠被編譯成平臺中立的字節碼,然后在可以使用Java的Web服務器上裝載和運行。容器有時也被稱作Servlet引擎,是Web服務器的擴充,它提供了Servlet的功能。Servlet通過Servlet容器實現的請求/應答機制與Web客戶端進行交互。
Servlet容器是服務器或應用服務器的一部分,它提供了網絡服務。通過這些網絡服務請求和應答對以MIME為基礎的請求進行解碼,形成以MIME為基礎的應答。一個Servlet容器在Servlet的整個生命周期中裝載并管理它。
一個Servlet容器能夠建立在Web服務器的核心中,也可以通過服務器本身的擴展API作為附加組件安裝在一個Web服務器中。Servlet容器還可以嵌入或安裝到支持Web的應用服務器中。
所有的Servlet容器必須將HTTP作為請求和應答的規程。另外,以類似HTIPS這樣的規程為基礎的請求和應答也可以被支持。
一個Servlet可以具有這樣一個處理序列:
1.一個客戶端連接到一個Web服務器,并發送一個HTTP請求到這個Web服務器。
2.請求被Web服務器接收,并轉交給Servlet容器。Servlet容器可以與Web服務器在同一個主機上運行、在同一個主機但不是同一個處理器上運行,或者是不同的主機上運行。
3.Servlet容器在其配置的Servlet中找到調用的Servlet,然后,用代表請求和應答的對象調用它。
4.Servlet使用請求對象找到誰是遠端的用戶,那些HTTP POST參數可能被作為這個請求的一部分,并找出其它相關參數。Servlet完成已經被編入程序的處理邏輯,然后生成數據返回客戶端。在它將數據返回到客戶端的時候通過應答對象完成。
5.當Servlet完成了對請求的處理,Servlet容器確認應答已經確實完成,則將控制權返回給Web服務器。
Java Servlet是創建動態的、高性能的電子商務站點的有效工具,它能夠改善電子商務應用的操作效能和可伸縮性,并能重復使用各種用于提高應用開發效率的部件。
◆ EJB
EJB (Enterprise JavaBeans)是用于開發安全、可擴展、事務型及多用戶組件的一種分布式組件模型。簡單地講,EJB是(理想的)包含業務邏輯的可重用軟件單元。正如JSP網頁允許把應用程序和表示邏輯分開,EJB允許把應用程序邏輯與系統級服務分開,這樣開發者可以集中精力于具體業務問題,而不是系統編程。這些企業小程序(Bean)業務對象具有三種基本形式,同樣也沒有必要三者都實現,它們分別是會話(Session)Bean、實體(Entity)Bean和消息驅動(Message-driven)Bean。
1. 會話Bean
會話Bean本身有兩種類型。一種是說明性會話(Stateful Session)Bean,這是一種用于表示一個客戶與系統交互的短暫對象。它執行客戶應用程序中的請求、訪問數據庫等,當客戶的操作完成后,它將被刪除(也就是它只存在于客戶會話中)。這方面的一個示例就是一個應用程序客戶發送一系列請求到一個應用程序,從而來執行一個業務處理。在這種情況下,說明性會話Bean可以跟蹤客戶與應用程序之間的交互狀態。另一種形式是無狀態(Stateless)會話Bean,不在客戶請求之間維護狀態信息。一般情況下,此類會話Bean用于實現一種不要求客戶狀態的特定服務,例如一個簡單的數據庫更新。
2.實體Bean
實體(Entity)Bean是一種持久性的對象,確定了數據存儲的模型。也就是說,它是數據的一個對象包裝器。例如,關于一次購買訂單的數據可以使用實體Bean PurchaseOrder表示出一個綜合的、包含全部相關購買訂單數據的視圖。與可供任何客戶使用的會話Bean相比,實體Bean可以同時由許多客戶訪問,但是必須通過一個主鍵來維護—個惟一的標識。實際上,在J2EE容器結構中,我們可以選擇由容器管理實體Bean的永久狀態,或者在Bean自身中“手工”實現這一點。
3.消息驅動Bean
消息驅動Bean是一類特殊的EJB,它并不是直接客戶調用的方式。消息驅動Bean的目的在于處理通過JMS收到的消息。消息驅動Bean通過提供一種在EJB容器內部處理消息的方式來實現JMS的異步屬性。當應用程序客戶或者一個應用程序通過JMS發送一條消息時,容器調用適當的消息驅動Bean來處理這條消息。
原文轉自:http://www.anti-gravitydesign.com