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