發表文章

目前顯示的是 11月, 2015的文章

網址的編解碼

對於網址列的編解碼,常常困擾我,總是得找工具程式來編解碼,例如 若是有個須要下載的檔案 " 下載檔案.pdf " 就要想辦法轉成 " %E4%B8%8B%E8%BC%89%E6%AA%94%E6%A1%88.pdf ",以保證所有的瀏器都能夠下載。 有時候我也會從別人的網頁中抓取一些檔案來下載,碰到上述編碼過的網址,就得想辦法還原出原來的檔名,所幸網路上已經有人提供了 好用的工具 ,讓我們可以直接線上手動轉換各種編碼。 因為經常要用的緣故,所以還是得改寫成Java 代碼 注意 : + (加號) 在古老的瀏覽器或處理程式代表%20(空白),若是您會處理到這類網址(例如 這個網頁 內用+代替空白),請不要忘了要先把 + 轉換成 %20

XA分散式交易

良葛格在 簡介交易 中已經把交易的性質說明的很清楚了,要嘛全部成功、要嘛全數陣亡;而distributed transaction(XA)是用來進行全域(global)交易,也就是把一堆交易綁(group)在一起,如同單一交易般具有 ACID 的特性。 要瞭解XA,有三篇文章必看:XA Exposed: Part I 、 PartII 與 Part III 。 簡單說明Two Phase Commit(2PC)其原則: 在XA中每一個 XAResource 代表不同的交易標的,每一組操做以一個 Xid 來表示 對每一個 XAResource 呼叫 start (),並開始作業處理(比如新增修改或刪除資料),當作業完成後再對 XAResource 呼叫 end () 若是作業出錯,必須對該作業與其前已完成的作業 XAResource ,呼叫 rollback () XA以失敗告終,中斷交易 準備階段,當所有的 XAResource 都完成 start () ~ end ()後,此階段對每一個 XAResource 叫用 prepare ()輪詢,所有輪詢結果必須是 XA_OK (準備好等待叫用 commit ())或 是XA_RDONLY (資料未改變,無需叫用 commit ()) 若是回傳結果不如預期,則對所有 XAResource 叫用 rollback () 若是這階段出現了 XAException ,coordinator(比如 TransactionManager 或是寫程式的你)則要負責收攤子( recover (復原),例如網路中斷後又連上了)或是放棄(救不回來了只好 forget ) 確認所有輪詢結果無誤後,對每一個 XAResource 呼叫 commit () 跟上階段一樣,若出現了 XAException ,coordinator也是要負責收攤子(復原或是放棄) 完成交易作業 測試程式 說明: 首先程式測試前會用 H2 database 啟動 兩個資料庫 ,並在啟動時塞入一筆叫 Rollback的資料 。 測試 代碼 中有四個 測試 ,建議一次執行一個(把其它的remark掉://@Test再執行$mvn test),由Log中看看它到底作了什