1
、
JBI
?????? JBI ( Java ? Business Integration )是一種企業(yè)服務總線 (Enterprise Service Bus,ESB) ,用于形成一種關鍵基礎設施片段,使我們能夠用 Java 實現(xiàn)面向服務的架構,主要目的是提供一個基于服務的平臺作為對現(xiàn)有 Java/J2EE 平臺功能的擴展。
當前的 J2EE 部署都運行在一個基礎上,那就是應用服務器。應用服務器本身由兩個獨立的部分組成 ——Servlet 容器和 EJB 容器,它們分別用于部署 JSP/Servlets 和 EJB 構件。在它們中的任何一個,你都能使用 Web services 。但是,在任何環(huán)境中以分散的方式使用 services 是很困難的工作,而 JBI 的目的就是為完成這個任務提供一個專門的環(huán)境。其最底層是一個容器,它與 J2EE 中的容器一樣定義了自身的部署構件。
JBI 提供了一種正規(guī)消息路由器 (Normalized Message Router,NMR) ,說白了,就是一個地點。在這個地點,所有基于消息的數(shù)據(jù)片段 ——SOAP 片段、 MOM 消息、 HTTP 數(shù)據(jù)或其它信息 —— 被聚合、集中、應用到業(yè)務邏輯、傳輸,如果有必要則被轉換成其它格式并隨后被分派到最終目的地。
JBI 很適合企業(yè)級應用,因為它通過一種總線型架構的基于消息的手段到達了適應大范圍的消費者和提供者的目的。現(xiàn)在,讓我們看看除了 NMR 還有什么構成了 JBI 。
和 JBI 環(huán)境直接交互的是兩個部分, JBI machine 和 JBI binding 。 JBI machine 定義了部署構件以及在環(huán)境中管理它們的方式。本質上,它是提供商設計的黑盒,用于在 JBI 中支持他們自己的模型。另一方面, JBI binding 則被環(huán)境通過專門的業(yè)務協(xié)議與外部世界進行通信。
JBI 是提供了一些簡單的 API 定義, 這些定義包括 NormalizedMessage Service , 在一個 Router 組件,以及一個管理模型用來管理服務的部署集成,例如 routing engines, BPEL engines, rule systems, transformation engines
JBI 提供了一個邏輯的 XML 消息網(wǎng)絡, 這一網(wǎng)絡能夠很容易的映射到 HTTP, email 和 JMS/MOM ,并很方便地適應遺留系統(tǒng),二進制地傳輸,和 RPC 系統(tǒng)( EJB 和 CORBA) 。 JBI 可以看做是對 JMS 的更高層次的邏輯抽象,并提供了不同的消息交換方式( 單步, 請求應答等)
2
、
SCA
服務構件架構 SCA ( Service Component Architecture )致力于為使用廣泛的編程語言來構造服務構件提供一種編程模型,并且也為把這些服務構件組裝為一個業(yè)務上的解決方案提供了一種模型,這種組裝的活動正是采用面向服務的架構 (service-oriented architecture) 來搭建應用系統(tǒng)的核心。 ??
SCA 為建設基于面向服務的體系結構的應用和系統(tǒng)提供了一種編程模型。這基于一種觀點,即業(yè)務功能以一系列服務的形式被對外提供出來,然后它們被組合在一起去實現(xiàn)滿足特定業(yè)務需求的解決方案。這些復合的應用,可以包含專門為此應用程序創(chuàng)建的新服務,也可以包含來自已有的系統(tǒng)和應用程序的業(yè)務功能,重復利用就像其中的一部分一樣。 SCA 即為組合服務提供了模型,也為服務構件的創(chuàng)建,包括在 SCA 組裝中重用已有應用系統(tǒng)的功能提供了模型。
在服務定義中, WSDL ( Web Service Description Language )是一個很好的范例。 WSDL 在增強應用之間的可連接性以及互操作性方面邁出了一大步。然而, WSDL 只關注了服務接口,它并不提供描述一個服務所依賴的其它服務,以及這個服務所需要使用的配置策略和服務之間的依賴關系。單獨通過 WSDL 很難實現(xiàn)服務之間的組合調用。
SCA 比 WSDL 走的更遠的方面是定義了一個服務組件模型以及一個服務組裝模型。服務模型提供了比 WSDL 更多的功能,它允許服務開發(fā)者不單定義服務的接口而且還可以定義 這個服務和其他服務的依賴關系,以及這些交互(事務,安全,以及可靠 傳輸)之間的策略 還有服務所可能提供的配置功能。
一個 SCA 模型對等于一個 SOA 項目,模型允許開發(fā)者組裝一組服務組件,解決引用依賴和使用策略。這是一個很大的進步,因為當前的 SOA 平臺需要開發(fā)者自己獲取那些私有的服務部署引用,甚至有時要在他們的服務實現(xiàn)中寫 hard code.
3
、
SCA
與
JBI
的區(qū)別
SCA 關注的重點只是 SOA 開發(fā)所看到和接觸到的。 SCA 并沒有關注用來執(zhí)行 SCA 模塊的引擎是如何構架的。只是對這個引擎的實現(xiàn)提供一個規(guī)范和實現(xiàn)依據(jù)。這個引擎可以用任何方式實現(xiàn)。
JBI 從另一個方面來說就是一組關注創(chuàng)建一個開發(fā)的,可擴展的以及標準組件的企業(yè)服務總線。 這樣它的內核是和 SCA 有一些重合的地方。同時兩者之間也存在互補的機制。
重合方面:是 JBI 關注的是如果將一組引擎組裝并運行于一個 JVM 中,是對編碼開發(fā)的一種設計方式。 相反 SCA 在另一方面并不將一個模塊約束單個 JVM 中。當然一個 SCA 模塊可以執(zhí)行在一個 JVM 中,但同時它也可以很方便的將這些引擎部署在不同的進程甚至是不同的節(jié)點上。
最大的區(qū)別之處是 SCA 不但支持 Java 而且還支持 C 、 EJB 、 Spring 、 BPEL ,在今后也許還會支持 C# , php 等。 而 JBI 只是 SCA 的一個實現(xiàn)方式,而不是唯一的選擇。