Struts HOW-TO 系列
++怎樣訪問數據庫++
[訪問一個數據庫]
在一個其於Struts的應用系統的設計過程中,最好能在web/表示層(presentation layer)和你的商務邏輯類(包含所有數據訪問操作的層)的中間,定義一個Action類,作為小型的適配器(thin adapter)。
所以,你可以先定義一些商務API(business API),這些API就是簡單的Java類。你可以傳遞一些參數給這些對象,並從這些對象返回一個Java Bean或者Java Bean的集合。這個Action類負責調用這些對象,並把它們返回的值傳遞給web/表示層。
通常,你可以為每一個你需要調用的商務方法/商務類API創建一個Action類。理想情況下,所有的數據庫訪問代碼都被封裝進了這些商務API類裡,所以Struts並不知道你正在使用的持久層(persistent layer)(甚至都不知道你使用了持久層)。它只需要傳遞一個主鍵(Key)或者一個查詢參數,然後處理返回的結果bean或者bean集合。這樣,你就可以在其他的應用環境裡復用這些商務API類,你還可以對這些獨立於Struts或HTTP環境的商務API進行單體測試。
開始的時候,最簡單的方法就是設計一個1:1的方案,為你的每一個商務API入口(entry-point)定義一個Action類。當你的經驗豐富了以後,你也可以使用DispatchAction組合這些Action類。你甚至可以定義一個簡單的"框架"Action,用來調用所有的這些商務類。你可以在contrib目錄裡找到Scaffold設計的ProcessAction,這是一個"框架"Action的完整實現。使用這種方案可以使用更少的Action類,但你必須對Struts和MVC框架的底層實現有較深的理解。不要害怕在開始的時候定義過多的Action,Struts的配置方案可以給予你充分的自由在以後重構你的設計,因為你可以靈活的改變你的Action類,而不會對應用程序造成影響。
在理想情況下,商務邏輯層(business logic layer)應該封裝所有的數據訪問細節,包括數據庫連接的獲得。但是,一些應用程序的設計要求調用者可以從一個DataSource對象來獲得數據庫連接。遇到這種情況時,Struts DataSource管理器可以使你在需要的時候配置這些DataSource資源。
Struts DataSource管理器在Struts配置文件(Struts-config.xml)裡定義。這個管理器可以用來分發和配置任何實現了javax.sql.DataSource接口的數據庫連接池(connection pool)。如果你的DBMS或者容器內置了符合這些要求的連接池,你可以優先選用它。
[Jakarta的公共連接池實現 - BasicDataSource]