應用程式伺服器中的「Web 服務基本交易」支援
應用程式伺服器中的「Web 服務基本交易 (WS-AT)」支援提供了 Web 服務環境的交易服務品質。分散式 Web 服務應用程式和其使用的資源,可以參與分散式廣域交易。
- WS-AT 是定義基本交易通訊協定的特定協調類型。這些規格如下:
- 「Web 服務協調 (WS-COOR)」會指定 CoordinationContext 和 Registration 服務,可供參與者 Web 服務用來參與特定協調類型所提供的通訊協定。 這些規格如下:
- Web 服務協調 1.0 版
- Web 服務協調 1.1 版
- Web 服務協調 1.2 版
WS-AT 支援是一種交互作業能力通訊協定的支援,其並未引進交易式支援的新的程式設計介面。廣域交易區分由企業應用程式以 Java™ Transaction API (JTA) UserTransaction 介面的標準用法提供。如果在廣域交易下執行的應用程式元件發出 Web 服務要求,只有在已設定適當的應用程式部署描述子時(依照「配置交易式部署屬性」相關主題中的說明),WS-AT CoordinationContext 才會隱含地傳播到目標 Web 服務。
如果應用程式伺服器是用來控管 Web 服務要求(其含有 WS-AT CoordinationContext)之目標端點的系統,則應用程式伺服器會在成為交易環境定義(用來執行目標 Web 服務應用程式)的目標執行時期環境中,自動建立一項附屬 JTA 交易。
下圖顯示在兩部用於 Web 服務要求(其含有 WS-AT CoordinationContext)的應用程式伺服器之間共用的交易環境定義。

![[z/OS]](../images/ngzos.gif)
您可以配置 WS-AtomicTransaction 通訊協定的原則。 您可以配置用戶端是否要傳播 WS-AT 環境定義,以及伺服器是否要接收 WS-AT 環境定義。為了確保用戶端在發出出埠服務要求時,一律傳送 WS-AtomicTransaction 環境定義,您必須建立某個原則集與用戶端的關聯性,其中該原則集必須包括 WS-Transaction 原則類型,且這個原則類型的 WS-AtomicTransaction 設定必須是 Mandatory。另外,如果您知道用戶端一律會呼叫包括 WS-AtomicTransaction ATAssertion 原則類型屬性的遠端端點,您也可以配置用戶端來套用提供者的 WS-Policy 配置,使得用戶端會自動採用提供者的必要原則。
為了確保 Web 服務提供者收到的任何要求包括 WS-AtomicTransaction 環境定義,您必須建立某個原則集與提供者的關聯性,其中該原則集必須包括 WS-Transaction 原則類型,且這個原則類型的 WS-AtomicTransaction 設定必須是 Mandatory。
為了確保用戶端或提供者永不使用 WS-AtomicTransaction 環境定義,您必須建立某個原則集與用戶端或提供者的關聯性,其中該原則集包括 WS-Transaction 原則類型,且這個原則類型的 WS-AtomicTransaction 設定必須是 Never。 針對不要 Web 服務要求在用戶端和提供者之間建立緊密聯結(例如,當企業之間有要求時)的環境,您可以使用這個配置。
如果沒有原則集與用戶端或提供者相關聯,或是 WS-Transaction 原則類型未包含在原則集中,則會使用預設 WS-Transaction 行為。
WS-AT 支援限制
在這個版本的應用程式伺服器中,WS-AT 環境定義無法從不可回復的用戶端程序啟動。
屬於同一 WS-AT 交易且傳送至伺服器叢集的工作要求,並不保證每次都會指派給相同的叢集成員。在這種情況下,交易的工作可能會由多個叢集成員來處理。如果多個叢集成員的交易工作互相競用相同的交易資源,可能會導致死鎖狀況。
應用程式設計
WS-AT 是一種兩段式確定的交易通訊協定,僅適用於持續期間較短的交易。
基本交易會協調透過暫停資源的交易式鎖定數來隔離交易式更新的資源管理程式。因此,通常不建議 WS-AT 交易分佈在多個企業網域中。 企業內部的交易所需要的語意,通常比兩段式確定來得鬆散;在這種情況下,使用補償性的商業交易(例如:作為「商業程序執行語言 (BPEL)」程序的一部分,或是使用「Web 服務商業活動 (WS-BA)」)可能會較為適當。
WS-AT 最適用於將交易環境定義分佈在單一企業中部署的 Web 服務之間。只有要求-回應訊息交換型樣會採用交易環境定義,因為交易的發送端(應用程式或儲存器)必須確定在該交易下所執行的所有商業作業,都已在要求完成交易之前完成。 單向要求所呼叫的 Web 服務從不會在發出要求的用戶端的交易下執行。
服務錯誤對 WS-AT 交易的影響,類似於 Enterprise JavaBeans (EJB) 應用程式異常狀況對交易的影響,如 EJB 規格所述。如果在要求端 WS-AT 交易下執行的服務傳回錯誤,應用程式伺服器即不會將交易自動標示為「僅限回復」。要求端的異常狀況處理程式會選擇交易是否可以進行,並選擇是否要將交易標示為「僅限回復」。如果要求端是在應用程式伺服器中執行,則可以使用標準 JTA 或 EJB API 將交易標示為「僅限回復」。 產生錯誤的服務元件本身可能在傳回錯誤之前,就將交易標示為「僅限回復」。如果服務元件的實作發生系統異常狀況,其通常會讓儲存器來處理異常狀況。應用程式伺服器儲存器在處理由服務實作所產生的系統異常狀況時,會自動將任何收到的交易環境定義標示為「僅限回復」。
應用程式開發
Web 服務應用程式運用 WS-AT 時,不需要特定的開發作業。
針對 JAX-RPC 應用程式,您必須適當設定一些應用程式部署描述子(如「配置交易式部署屬性」的相關主題所述)。JAX-RPC 執行時期支援 WS-AT 1.0。
針對 JAX-WS 應用程式,請建立原則集、新增 WS-Transaction 原則類型至原則集、選擇性地配置原則類型,以及將原則集連接到會參與 WS-BA 通訊的應用程式或用戶端,來啟用 WS-AT 支援。JAX-WS 執行時期支援 WS-AT 的 WS-AT 1.0、WS-AT 1.1、WS-AT 1.2 和 WS-Policy 主張。
當 JAX-WS 執行時期接收入埠要求時,支援 WS-Transaction 1.0、WS-Transaction 1.1 和 WS-Transaction 1.2 規格層次。 當傳送出埠 JAX-WS 要求時,只能使用一個規格層次。 如果可從目標 Web 服務的「Web 服務說明語言 (WSDL)」或是從用戶端的 WS-Transaction 原則類型使用 WS-Transaction WS-Policy 主張,則會使用適用於用戶端和目標 Web 服務的規格層次。比方說,如果目標 Web 服務的主機作業環境只支援 WS-Transaction 1.0,則會使用 WS-AT 1.0。如果兩種規格層次皆適用,或是沒有可用的 WS-Transaction WS-Policy 主張,則會使用「交易服務」設定中設定的預設 WS-Transaction 規格層次。
- 針對用戶端,如果用戶端不考量提供者的原則,則用戶端不會傳送任何 WS-AT 或「Web 服務商業活動 (WS-BA)」環境定義。這個行為相等於 WS-Transaction 原則設定為 Never。
- 針對用戶端,如果用戶端會考量提供者的原則,且提供者的原則包括 WS-AT 或 WS-BA 主張,則用戶端會傳送 WS-AT 或 WS-BA 環境定義。這個行為相等於 WS-Transaction 原則設定為 Supports。
- 針對伺服器,伺服器不會接收任何 WS-AT 或 WS-BA 環境定義。 這個行為相等於 WS-Transaction 原則配置設定為 Never。
應用程式開發人員不需要明確登錄 WS-AT 參與者。應用程式伺服器執行時期會負責登錄 WS-AT 參與者,方式與在 WS-AT 交易所聯合的 JTA 交易中登錄 XAResources 相同。 交易完成時,應用程式伺服器交易服務會在結構上協調所有 XAResources 和 WS-AT 參與者。
如果發出 Web 服務應用程式要求時,JTA 交易正在執行緒上作用中,該交易會在 Web 服務要求中傳播,並建立在目標環境中。這項程序類似於透過 IIOP 來分送交易環境定義(如 EJB 規格所述)。在目標環境中執行的任何交易都會成為相同廣域交易的一部分。
WS 交易原則主張
如果您對提供者配置 WS-Transaction 通訊協定的原則,這項配置會影響針對與原則類型相關聯的 Web 服務所產生之任何 WSDL 內含的主張。用來說明使用 WS-AtomicTransaction 之用戶端或提供者,其交易式需求的 WS-Policy 主張為 ATAssertion。如果 WS-Transaction 原則類型的 WS-AtomicTransaction 設定為 Mandatory 或 Supports,則 WSDL 中會包含一個原則主張。
應用程式伺服器也可以剖析、瞭解及套用其剖析之 WSDL 中的這類主張。
下例顯示一個 WSDL,其中 WS-AtomicTransaction ATAssertion 表示端點必須以要求訊息內含的 WS-AT 環境定義來呼叫,且環境定義可以是 WS-Transaction 1.0 或 1.1 格式。有兩個名稱空間和兩個主張;各用於一個 WS-Transaction 規格層次,其會使用 WS-Policy ExactlyOne 運算子來顯示用戶端必須選擇要使用的規格層次。
<wsdl:definitions targetNamespace="bank.example.com"
xmlns:tns="bank.example.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsat11="http://docs.oasis-open.org/ws-tx/wsat/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsat"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="ATPolicy">
<wsp:ExactlyOne>
<wsat11:ATAssertion />
<wsat10:ATAssertion />
<!-- 省略的主張 -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- 省略的元素 -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- 省略的元素 -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#ATPolicy" wsdl:required="true"/>
<!-- 省略的元素 -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>