Posted on 2006-01-13 22:24
JDeodar 閱讀(412)
評論(0) 編輯 收藏 所屬分類:
J2EE
Tansation Management -- 事務管理
應用程序可以用于以下兩種手段來管理容器事務,從而控制應用服務器的事務管理服務
1、編程式事務管理:使用JTA UserTransaction對象,通過JNDI獲取
2、聲明式事務管理:通過使用組建模型(即EJB CMT),這是一種建立在JTA基礎設施之上的高層的服務
這兩種方法通常都被命名為“受控的事務”(EJB CMT)。
容器管理事務(Container-Managed Transaction)
優點:把事務管理從Java代碼中挪到了EJB部署描述符中。因此事務編程了一個無需硬編碼的橫切面。
缺點:
1、只有EJB才能夠使用聲明式事務管理
2、聲明式事務實際上也符合80-20原則
3、EJB CMT必須使用全局事務管理,如果僅需要單事務的資源,大材小用。
Spring的聲明式事務管理建立在Spring的AOP框架之上,所以Spring的事務管理需要帶有AOP功能的Spring Bean工廠。
事物的傳播類型:(6種)
1、“required”運行在當前的事務范圍內,如果當前沒有啟動事務,那么創建一個新的事物
2、“supports”運行在當前的事務范圍內,如果當前沒有啟動事務,那么就不在事務范圍內執行
3、“mandatory”運行在當前的事務范圍內,如果當前沒有啟動事務,那么拋出異常
4、“requires new”創建一個新的事務,如果當前啟動了事務,那么掛起當前事務
5、“not supported”不在事務范圍內執行,如果當前啟動了事務,那么掛起當前事務
6、“never”不在事務范圍內執行,如果當前啟動了事物,那么拋出異常
默認的事務類型是“required”,適用于絕大多數的情況。
編程式事務管理通常有以下兩種使用方式:一是通常的使用方式,在一個catch代碼塊中對任何異常進行回滾處理;二是通過一個“控制反轉(IoC)”模版類和一個回調實現。
事物管理最適合使用AOP。
Spring的事務處理最重要的好處是,在不需要任何部署步驟和特定的需要的情況下,可以讓POJO具備事務處理能力。
YAGNI(You Arent Gonna Need It,不要為不必要的需求埋單)
Persistence -- 持久化
Patterns of Enterprise Application Architecture(2002 Martin Fowler),常簡稱POEAA -- 一定要讀
處理批量存取和批量更新時,O/R映射會有問題,不知道什么時候才能解決優化呢?
下面的征兆,可以考慮使用O/R映射:
1、針對領域對象的“加載/編輯/存儲”流程,例如先加載一條產品記錄,對其進行修改,然后更新會數據庫。
2、對象以批量查詢的方式取出,但更新和刪除則是單獨進行。
3、大量對象需要積極地緩存(通常出現在“讀操作遠多于寫操作”的情況下,如web應用。)
4、在領域對象與數據庫表/字段之間有一個相當自然的對應關系。
5、不需要對SQL進行特別的優化。
細粒度的領域模型不應該用重量級的EJB組件來建模,而應該用簡單的Java對象——POJO(Plain Old Java Object)——來建模。
所有的持久化技術必然會涉及對資源的管理:
1、連接工廠
2、連接
DAO模式的用途是將“與持久化相關的代碼”從業務邏輯中分離出來,換句話說,把業務流程和規則放在一邊,與持久化相關的問題放在另一邊。DAO模式需要一個DAO接口,以便將特定的數據訪問實現細節隱藏起來。
使用Spring框架進行數據訪問
1、Spring的bean工廠和應用上下文容器使得應用程序中的各種對象能夠輕松地裝配起來。
2、Spring有一個清晰的事務模型
3、Spring提供了一個通用的數據庫訪問異常體系。
4、對于各種持久化方式,Spring用形式統一的模版機制解決了關閉連接、處理異常等問題。
JdbcTemplate實例(以及別的Spring模版)都是線程安全的,允許多線程復用。因此只需要在DAO初始化將一個JdbcTemplate實例提供給它,所有的DAO方法都可以使用這同一個模版實例,不必擔心任何同步問題。
Spring框架提供了另一個層次較高的JDBC抽象:可詢操作、更新操作或是存儲過程。