原文地址:http://www.ibm.com/developerworks/cn/java/j-appfuse/

AppFuse 是一個開放源碼的項目和應用程序,它使用了在 Java 平臺上構建的開放源碼工具來幫助我們快速而高效地開發 Web 應用程序。從核心上來說,AppFuse 是一個項目骨架,類似于通過向導創建新 Web 項目時 IDE 所創建的東西。當我們使用 AppFuse 創建一個項目時,它會提示我們將使用開放源碼框架,然后才創建項目。它使用 Ant 來驅動測試、代碼生成、編譯和部署。它提供了目錄和包結構,以及開發基于 Java 語言的 Web 應用程序所需要的庫。


AppFuse 提供了很多應用程序需要的一些特性,包括:

  • 認證和授權
  • 用戶管理
  • Remember Me(這會保存您的登錄信息,這樣就不用每次都再進行登錄了)
  • 密碼提醒
  • 登記和注冊
  • SSL 轉換
  • E-mail
  • URL 重寫
  • 皮膚
  • 頁面修飾
  • 模板化布局
  • 文件上載

典型的 AppFuse 應用程序




























理由 1:測試
AppFuse 的文檔展示了如何測試應用程序的所有 層次。它從數據庫層開始入手,使用了 DbUnit(請參看
參考資料)在運行測試之前提前使用數據來填充自己的數據庫。在數據訪問(DAO)層,它使用了 Spring 的 AbstractTransactionalDataSourceSpringContextTests 類(是的,這的確是一個類的名字!)來允許簡單地加載 Spring 上下文文件。另外,這個類對每個 testXXX() 方法封裝了一個事務,并當測試方法存在時進行回滾。這種特性使得測試 DAO 邏輯變得非常簡單,并且不會對數據庫中的數據造成影響。

在服務層,jMock (請參看 參考資料)用來編寫那些可以消除 DAO 依賴的真正 單元測試。這允許進行驗證業務邏輯正確的快速測試;我們不用擔心底層的持久性邏輯。

在 Web 層,測試會驗證操作(Struts/WebWork)、控件(Spring MVC)、頁面(Tapestry)和管理 bean(JSF)如我們所期望的一樣進行工作。Spring 的 spring-mock.jar 可以非常有用地用來測試所有這些框架,因為它包含了一個 Servlet API 的仿真實現。如果沒有這個有用的庫,那么測試 AppFuse 的 Web 框架就會變得非常困難。

UI 通常是開發 Web 應用程序過程中最為困難的一部分。它也是顧客最經常抱怨的地方 —— 這既是由于它并不是非常完美,也是由于它的工作方式與我們期望的并不一樣。另外,沒有什么會比在客戶面前作演示的過程中看到看到異常堆棧更糟糕的了!您的 應用程序可能會非常可怕,但是客戶可能會要求您做到十分完美。永遠不要讓這種事情發生。Canoo WebTest 可以對 UI 進行測試。它使用了 HtmlUnit 來遍歷測試 UI,驗證所有的元素都存在,并可以填充表單的域,甚至可以驗證一個假想的啟用 Ajax 的 UI 與我們預期的工作方式一樣。(有關 WebTest 和 HTMLUnit 的鏈接請參看 參考資料。)

為了進一步簡化 Web 的測試,Cargo(請參看 參考資料)對 Tomcat 的啟動和停止(分別在運行 WebTest 測試之前和之后)進行了自動化。


理由 2:集成
  • 編譯、報告和代碼生成:Ant、Ant Contrib Tasks、Checkstyle、EMMA、Java2Html、PMD 和 Rename Packages
  • 測試框架:DbUnit、Dumbster、jMock、JUnit 和 Canoo WebTest
  • 數據庫驅動程序:MySQL 和 PostgreSQL
  • 持久性框架:Hibernate 和 iBATIS
  • IoC 框架:Spring
  • Web 框架:JSF、Spring MVC、Struts、Tapestry 和 WebWork
  • Web 服務:XFire
  • Web 工具:Clickstream、Display Tag、DWR、JSTL、SiteMesh、Struts Menu 和 URL Rewrite Filter
  • Security:Acegi Security
  • JavaScript 和 CSS:Scriptaculous、Prototype 和 Mike Stenhouse 的 CSS Framework

理由 3:自動化


理由 4:安全特性和可擴展性
Acegi Security 是 J2EE 安全模型中曾經出現過的最好模型。它讓我們可以實現很多有用的特性,這些特性在 Servlet API 的安全模型中都不存在:認證、授權、角色保護方法、Remember Me、密碼加密、SSL 切換、用戶切換和注銷。它讓我們還可以將用戶證書存儲到 XML 文件、數據庫、LDAP 或單點登錄系統(例如 Yale 的 Central Authentication Service (CAS) 或者 SiteMinder)中。


理由 5:使用 AppGen 生成代碼

AppFuse 中提供了一個基于 Ant 和 XDoclet 的代碼生成工具,名叫 AppGen。默認情況下,常見的 DAO 和管理器都可以允許我們對任何普通老式 Java 對象(POJO)進行 CRUD 操作,但是在 Web 層上這樣做有些困難。AppGen 有幾個特性可以用來執行以下任務:

  • (使用 Middlegen 和 Hibernate 工具)從數據庫表中生成 POJO
  • 從 POJO 生成 UI
  • 為 DAO、管理器、操作/控制器和 UI 生成測試

理由 6:文檔


理由 7:社區


參考資料

學習

獲得產品和技術
  • AppFuse on java.net:下載不同風味的 AppFuse。

  • WebWork:了解這個易于使用的 Web 框架。

  • DbUnit:查看更多有關 JUnit 擴展的內容。

  • jMock:創建動態仿真對象來簡化真正的單元測試。

  • Canoo WebTest:自動化 Web 應用程序的 UI 測試。

  • HtmlUnit:WebTest 的優秀 JavaScript 支持背后的基礎。

  • Cargo:自動啟動和停止容器。

  • Greenbox:一種代碼生成框架。


討論


關于作者

Matt Raible 居住在美國科羅拉多州的丹佛,他在那里是 Spring 和 Web 框架對 Virtuas Open Source Solutions 的實踐先驅。他在開放源碼領域具有豐富的經驗,是這個領域的專家。他在這個領域中既是用戶,又是一名開發人員。Matt 是 SourceBeat PublishingSpring Live 的作者。他還為 Apress 的書籍 Pro JSP Third Edition 作出了很大的貢獻。他是很多開放源碼會議的積極倡導者,包括 ApacheCon、MySQL User's Conference 和 OSCON,同時他還是 http://raibledesigns.com 上一名非常活躍的博客。Raible 的大部分生活都被計算機所包圍了,盡管他是在連電都沒有的 Montana 長大的。當不工作的時候時,他總是試圖讓妻子 Julie 成為世界上最幸福的女人,或者與他們的孩子 Abbie 和 Jack 一起玩耍。




歡迎大家訪問我的個人網站 萌萌的IT人