透過將一個或多個步驟納入不可分的工作單元,作業事件可確保資料的完整性和一致性。本章包括下列小節:
作業事件是應用程式中一系列嚴密的動作,所有動作必須成功完成,否則每個動作中的所有變更會被撤消。例如,將資金從支票帳戶轉入儲蓄帳戶是一項作業事件,步驟如下:
檢查支票帳戶是否有足夠的資金來支付此轉帳操作。
如果支票帳號中有足夠的資金,則將該筆資金記入此帳號的借方。
將這些資金記入儲蓄帳戶的貸方。
將此次轉帳記錄到支票帳戶記錄中。
將此次轉帳記錄到儲蓄帳戶記錄中。
如果這些步驟的任何一個步驟失敗,則必須撤消在前面的步驟中所做的所有變更,而且支票帳戶和儲蓄帳戶的狀態必須與它們在作業事件開始之前的狀態相同。該事件稱為回復。如果所有步驟均成功完成,則該作業事件處於已確定狀態。作業事件以確定或轉返狀態結束。
J2EE 技術中的作業事件處理包括以下五個參與者:
透過實作不同的 API 和功能,每個實體均有助於提高作業事件處理的可靠性,如下所述:
作業事件管理員提供支援作業事件分隔、作業事件資源管理、同步化及作業事件上下文傳遞所需的服務和管理功能。
Application Server 提供支援應用程式執行階段環境 (包括作業事件狀態管理) 所需的基礎架構。
資源管理員 (透過資源配接卡) 提供應用程式對資源的存取權。資源管理員參與分散式作業事件,方法為實作由作業事件管理員使用的作業事件資源介面,以針對作業事件關聯、作業事件完成以及回復工作進行通知。 關聯式資料庫伺服器便是這樣一個資源管理員。
資源介面是一個系統層級的軟體程式庫,應用程式伺服器或用戶端可使用該程式庫連線到資源管理員。資源介面通常專用於資源管理員。它可以做為程式庫,在使用它的用戶端位址空間中使用。JDBC 驅動程式便是此類資源配接卡的一個範例。
開發用於應用程式伺服器環境的作業事件使用者應用程式使用 JNDI 來查找作業事件資料源及作業事件管理員 (可選)。應用程式可以使用企業 Bean 的宣告性作業事件屬性設定或明確的程式化作業事件分隔。
由於伺服器當機或資源管理員當機,作業事件可能未完成。完成這些中斷的作業事件並將其從故障中恢復至關重要。Application Server 可在伺服器啟動時從這些故障中回復並完成作業事件。
執行恢復作業時,如果無法訪問某些資源,則伺服器重新啟動作業可能被延遲,因為伺服器正在嘗試恢復作業事件。
如果作業事件跨伺服器進行,啟動此作業事件的伺服器會連絡其他伺服器以獲得作業事件的結果。如果無法訪問其他伺服器,則該作業事件將使用 [啟發式決策] 欄位來確定結果。
可以使用 Admin Console 配置 Application Server,以回復作業事件。有關執行這項作業的詳細程序,請參閱 Admin Console 線上說明。
依預設,伺服器不會使作業事件逾時。也就是說,伺服器無限期地等待作業事件完成。在為作業事件設定了逾時值後,如果作業事件在配置的時間內未完成,則 Application Server 將回復該作業事件。有關執行這項作業的詳細步驟,請參閱 Admin Console 線上說明。
為了保持被呼叫資源的資料完整性,同時為了能夠從故障中恢復,作業事件記錄將記錄有關每個作業事件的資訊。作業事件記錄儲存在 [作業事件記錄位置] 欄位所指定目錄的 tx 子目錄中。這些記錄無法進行人為讀取。
關鍵點作業可壓縮作業事件記錄檔。關鍵點間隔是指記錄上關鍵點作業之間的作業事件數目。關鍵點作業可以減小作業事件記錄檔的大小。關鍵點間隔數越大 (例如,2048),作業事件記錄檔也越大,但關鍵點作業較少,效能可能更佳。關鍵點間隔越小 (例如,256),記錄檔也越小,而同時由於關鍵點作業較為頻繁,效能會略微降低。