現在項目基本都是多數據庫的數據存儲方式,但sh架構的對多數據庫架構的支持好像沒發現什麼好的解決方案。尤其採用了spring.net的事物aop後,感覺對多數據庫的事物處理更費勁。可能是本人水平太低吧。
目前項目中,對多數據數據庫的支持,就是每一個數據庫配置相應的sessionFactory、transactionMananger與transactionInterceptor。在dao層實現3個對象的注入。可是此方式並不能實現跨數據的事物處理。這可是大問題。爲此,索性不用spring.net提供的事物處理模塊,或對於跨數據庫採用自己的事物處理方式。其實spring.net的事物處理是採用aop方式,那何不項目中自己寫一個事物aop實現多數據庫的事物支持以及跨數據庫的事物處理呢?
實現的代碼就不貼了,原理如下:
1. 創建一個TransactionOptionAttribute事物選擇類繼承自Attribute
TransactionOptionAttribute類中關聯System.Transaction的TransactionScopeOption枚舉
2. 創建一個TransactionAdvice事物建議繼承IMethodInterceptor
根據TransactionOptionAttribute的事物枚舉值創建System.Transaction的TransactionScope的對象實現跨數據庫的事物處理
3. 給客戶端的方法添加TransactionOption的事物聲明。
4. 別忘了,在系統中啓動分佈式事務處理的服務。
這個是個比較土鱉的方式來實現對支持多數據庫以及事物的支持。但感覺還實用,呵呵~