weblogic 建立datasource時,配置注意事項,記錄一下weblogic 的doc。 java
使用管理控制檯配置 JDBC 數據源時,WebLogic Server 會根據 JDBC 驅動程序的類型自動選擇特定的事務選項: web
支持全局事務:(在默認狀況下處於選中狀態)若是要在全局事務中使用來自數據源的鏈接,則選中此選項,即便未選擇 XA 驅動程序也是如此。有關詳細信息,請參閱使用非 XA JDBC 驅動程序啓用對全局事務的支持。 數據庫
選中「支持全局事務」時,還必須爲 WebLogic Server 選擇在處理全局事務時要用於事務分支的協議: 編程
注意: | 多數據源使用的數據源不支持「記錄上一個資源」。 |
若是在應用程序中使用全局事務,則應使用 XA JDBC 驅動程序在 JDBC 數據源中建立數據庫鏈接。若是某個 XA 驅動程序不可用於您的數據庫,或者您不但願使用 XA 驅動程序,那麼您應在數據源中啓用對全局事務的支持。若是應用程序知足如下任何一個條件,則也應啓用對全局事務的支持: 安全
WebLogic Server 經過 JDBC 數據源支持「記錄上一個資源」(Logging Last Resource,簡稱 LLR)事務優化。LLR 是一個性能加強選項,使用該選項可以使一個非 XA 資源可以使用與 XA 一樣的 ACID 保證參與全局事務。LLR 是「上一個代理優化」的改進結果。它與「上一個代理優化」不一樣,由於它對於事務而言是安全的。LLR 資源對其事務工做使用本地事務。WebLogic Server 事務管理器準備事務中的全部其餘資源,而後根據 LLR 資源本地事務的結果肯定全局事務的提交決定。 服務器
當爲 LLR 配置的數據源中的鏈接參與兩階段提交 (2PC) 全局事務時,WebLogic Server 事務管理器會經過如下方式完成事務: 併發
可按照使用來自任何其餘數據源的 JDBC 鏈接的方式,在應用程序中使用來自啓用了 LLR 的數據源的 JDBC 鏈接:在開始某個事務以後,在 JNDI 樹中查找數據源,而後請求一個來自該數據源的鏈接。可是,使用 LLR 優化時,WebLogic Server 會在內部管理鏈接請求,並以不一樣於在 XA 事務中使用的處理方式來處理事務處理。 分佈式
配置啓用了 LLR 的 JDBC 數據源時,請考慮如下要求和限制:
若是須要使用某個 JDBC 數據源來支持分佈式事務,但沒有符合 XA 標準的驅動程序可供您的 DBMS 使用,則可對某個數據源的「非 XA 驅動程序」選項選擇「仿真兩階段提交」,以便對來自該數據源的鏈接參與的事務仿真兩階段提交。此選項是「常規」選項卡(可經過依次選擇「JDBC 數據源」「配置」「常規」選項卡來訪問該選項卡)上的高級選項。
對「非 XA 驅動程序」選項選擇「仿真兩階段提交」(EnableTwoPhaseCommit設置爲true)時,非 XA JDBC 資源老是會在XAResource.prepare() 方法調用期間返回XA_OK。資源會嘗試提交或回滾其本地事務以響應後續的XAResource.commit() 或XAResource.rollback() 調用。若是資源提交或回滾失敗,則會致使一個試探性錯誤。應用程序數據可能會因爲試探性失敗而處於不一致狀態。
未在控制檯中對「非 XA 驅動程序」選項選擇「仿真兩階段提交」(EnableTwoPhaseCommit設置爲false)時,非 XA JDBC 資源會致使XAResource.prepare() 失敗。當僅有一個資源參與事務時,一階段優化將跳過XAResource.prepare(),而且在大多數狀況下,事務會成功提交。
注意: | 對「非 XA 驅動程序」選項選擇「仿真兩階段提交」時,會存在破壞數據完整性的風險。BEA 建議使用符合 XA 標準的 JDBC 驅動程序或「記錄上一個資源」選項(而不是使用「仿真兩階段提交」選項)。請確保在啓用此選項以前考慮了這些風險。 |
該非 XA JDBC 驅動程序支持一般稱爲「JTS 驅動程序」,由於 WebLogic Server 在內部使用 WebLogic JTS 驅動程序以支持該功能。
WebLogic Server 使用「仿真兩階段提交」數據源事務選項支持非 XA JDBC 資源參與全局事務,但會存在一些在設計應用程序(以使用這樣的數據源)時必須考慮的限制。由於非 XA 驅動程序不符合 XA/2PC 合同,而且僅支持一階段提交和回滾操做,因此 WebLogic Server(經過 JTS 驅動程序)必須進行妥協以容許資源參與由事務管理器控制的某個事務。
在對「非 XA 驅動程序」選項使用「仿真兩階段提交」以前,請考慮如下限制和風險:
對非 XA 資源選擇「仿真兩階段提交」(enableTwoPhaseCommit = true) 時,非 XA 資源的事務準備階段老是會成功。所以,非 XA 資源沒有真正地參與兩階段提交 (2PC) 協議,而且容易失敗。若是在準備階段以後,在非 XA 資源中發生故障,則非 XA 資源可能會在 XA 事務參與者要提交事務時回滾事務,從而致使試探性完成和數據不一致。
因爲存在破壞數據完整性的風險,因此,「仿真兩階段提交」選項僅應在可容許出現試探性狀況的應用程序中使用。
由於非 XA 驅動程序僅對本地數據庫事務進行操做,因此,在有關外部事務管理器的數據庫中沒有事務待定狀態的概念。在非 XA 資源上調用XAResource.recover()時,該方法老是會返回 Xid(事務 ID)的一個空集,即便可能有須要提交或回滾的事務,也是如此。所以,那些在全局事務中使用非 XA 資源的應用程序沒法從系統故障中恢復過來,並沒有法保持數據完整性。
由於 WebLogic Server 依賴於與特定 JDBC 鏈接相關聯的數據庫本地事務來支持全局事務中的非 XA 資源,因此,當某個應用程序經過一個全局事務上下文在多個 WebLogic Server 實例中訪問同一 JDBC 數據源時,JTS 驅動程序會始終將 JDBC 操做路由到由該應用程序在事務中創建的第一個鏈接。例如,若是某個應用程序在一個服務器上啓動了某個事務,訪問非 XA JDBC 資源,而後對另外一個服務器進行遠程方法調用(remote method invocation,簡稱 RMI)並訪問某個使用同一底層 JDBC 驅動程序的數據源,則 JTS 驅動程序會識別出該資源具備與其餘服務器上的事務相關聯的鏈接,並會設置一個到第一個服務器上的實際鏈接的 RMI 重定向。對該鏈接的全部操做都會對創建在第一個服務器上的一個鏈接執行。此行爲可因爲與設置這些遠程鏈接和對一個物理鏈接進行 RMI 調用相關聯的開銷而致使性能損失。
將某個非 XA 資源(其「仿真兩階段提交」處於選中狀態)註冊到 WebLogic Server 事務管理器時,會使用實現 XAResource 接口的類的名稱註冊該資源。由於其「仿真兩階段提交」處於選中狀態的全部非 XA 資源都對 XAResource 接口使用 JTS 驅動程序,因此,會使用同一名稱註冊全部參與某個全局事務的非 XA 資源(其「仿真兩階段提交」處於選中狀態)。若是在某個全局事務中使用多個非 XA 資源,則會致使命名衝突或可能會出現試探性失敗。