SOA在Java領域有兩套标準:一個是SUN推出的JBI,另一個是:IBM和BEA等公司推出的SCA和SDO标準。
JBI之關注Java元件隻處理Java元件的內建。
SCA實作了業務元件和傳輸協定的分離,可以處理各種平台元件的內建。
SDO可以的自由讀取各種不同資料源的資料。
一、JBI程式設計模型
JBI是由容器和插件(Plug-in)組成的可插入式架構。這個容器托管使用消息路由進行通信的插件元件。架構上,元件通過一個抽象的服務模型(一個消息傳遞模型,位于任何特殊協定或消息編碼之上的抽象層中)進行互動。
在基于JBI的實作中,服務之間并不直接互動。取而代之的是,采用類似EAI實作中廣泛應用的消息代理架構,JBI容器扮演在服務之間路由消息的通用中介,(見圖1)。
圖1 通過JBI協調消息交換
分離交換的參與者(JBI架構的基礎9)在服務提供者和消費者之間提供了解耦,以及一個用于協調(mediating)服務通信量(或插入所有額外需要的功能)的明确位置。
此時,協調器(Mediation)可以支援廣泛的功能,從消息傳送和安全加強,到基于内容的路由和服務标本标定。
JBI容器托管了2類不同的插件元件:
- 服務引擎(Service Engine,SE)。SE本質上是用來托管JBI環境内部服務提供者和消費者的标準容器f。例如,在JBI環境中經常出現的SE包括資料轉換器、業務規則容器和BPEL引擎。
- 綁定元件(Binding Component,BC)。BC為JBI環境外部的服務消費者和提供者提供互聯性。BC允許內建不提供Java API的元件/應用程式,并使用遠端存取技術通路它們。
元件間的互動利用了基于WSDL 2.0的标準化服務定義。WSDL 2.0定義在服務消費者和提供者之間提供了共享的協定,并作為JBI實作互操作能力的基礎。
除了标準化的服務定義,JBI使用“通用化(normalized)”消息的概念支援全局元件互操作能力。消息通用化将協定與業務特定的上下文映射成一個通用的、可傳輸風格,這與EAI實作中經常使用的“規範(canonical)”消息表示概念非常類似。
每個JBI容器存在于一個單獨的虛拟機中,并容納所有的BC和SE,容器提供了一組服務,為SE和BC實作提供操作性支援。
JBI也定義了基于JMX的标準控制集合,允許外部管理工具執行不同的系統管理任務,也可以管理元件本身。管理支援為以下情形提供了标準機制:
- 安裝plug-in元件。
- 管理plug-in元件的生命周期(啟動/停止等。)。
- 部署伺服器件給元件。
二、服務元件架構(Service component Architecture,SCA)
盡管服務元件架構(SCA)被作為規範定義(該規範定義了使用面向服務架構建構系統的模型),但它是一個有效的模型(該模型用來将元件組合成服務),并為服務組合成解決方案提供了額外支援。
SCA基于2個主要的元模型:
- 類型元模型。
- 組合元模型。
類型元模型
這個元模型(見圖2)描述元件類型、接口和資料結構。
圖2 描述元件、接口和它們依賴的元模型
一個元件實作由以下的4組規範定義:
- 被提供的接口——元件定義的接口集。這些接口通常定義為WSDL端口類型或語言接口,如Java或C++。一個元件可以暴露0或多個接口。每個接口包含幾個方法。
- 被要求的規範(引用)——元件實作使用的接口集。這些接口通常定義為WSDL端口類型或語言接口,如Java或C++。一個元件可以有0或多個接口。
- 用來裁剪或自定義元件行為的屬性。每個屬性定義為一個屬性元素。一個元件可以包含0或多個屬性元素。
- 定義元件實作的實作元件。SCA允許很多不同的實作技術,如Java、BPEL、C++、SQL等。SCA為引入新的實作類型定義了擴充機制。
組合元模型
這個元模型(見圖3)定義了元件執行個體,以及它們是如何連接配接的。
圖3 元件執行個體和它們在組合元模型中的連接配接
這個元模型中執行個體的概念有别于在OO中使用的執行個體概念。此處的元件執行個體是指一個帶有被完整解析的屬性集,為解決特殊問題而修改元件行為的元件實作。
一個組合定義了很多元件執行個體,它們彼此互動,這裡的互動使用連線(wire)來定義。
在SCA中,連線使得絕大多數的底層代碼被抽出(與Indigo中的信道類似)。如,連線可以被定義同步的或異步的,支援元件調用的事務行為等。SCA在幕後處理這些底層細節。連線同樣可以在任意方向上連接配接2個不同的接口語言(如Java接口和WSDL 端口類型/接口),隻要這2個接口定義的操作是等價的就行了。
除了連線,SCA也支援通過特殊的元件類型,如導入(imports)和導出(exports),進行子產品間通信。連線、導入和導出元件的結合使得元件可以引用外部服務。
組合元模型定義的元件組合,與服務組合既類似又不同,盡管兩者都定義了使元件/服務一起工作的方式。通過被組合本身引入的功能,服務組合增強了參與服務的功能;而這個元模型隻定義元件(更接近于服務實作)間的連接配接。
SCA實作依賴于服務資料對象(Service Data Objects,SDO),它提供了表示資料的通用模型的技術。SDO是元件的資料交換基礎。SDO架構中的基本概念是資料對象——包含基本類型資料和(或)其它資料對象的容器。中繼資料提供了被包含資料的資訊,它被資料對象顯式引用。在SDO中資料對象的組合由資料圖表示。除了對象本身,圖中還包含變更概要,用來記錄圖中資料對象和屬性在處理過程中變化的資訊(類似微軟環境中的ADO)。除了SDO,SCA還引入了服務消息對象(Service message objects,SMO),它提供了服務間處理和交換消息的抽象層(類似JBI中的标準化消息)。
如果GUI支援,SCA實作會非常強大,可以在面闆上實作圖形化元件的連接配接。
三、SCA與JBI的主要異同
1、相同點
- 目的是一樣的:都是為了內建。
- 大緻方向一樣:都是為了将服務和傳輸協定解耦。
2、不同點
- JBI是以請求消息和相應消息作為切入點,在內建時将消息和傳輸協定解耦,形成一種與傳輸協定無關的标準消息,這樣形成一種全新的差別于現有應用伺服器的內建容器,是從容器的角度出發,一種全新的容器模型。
- SCA以接口作為切入點,從元件接口層将傳輸協定和接口實作解耦,是從程式設計的角度出發,一種全新的程式設計模型。