首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JSF 在 GlassFish 管理控制台的實戰應用:專訪核心提交者 Anissa

     編輯:Java 相關知識

前言

GlassFish 作為開源應用服務器標桿,其管理控制台是展示 Java EE 技術棧的最佳窗口。本文整理自 InfoQ 對 GlassFish 核心提交者 Anissa 的深度專訪,揭示 JSF 在大型企業級控制台開發中的架構決策、工程實踐與性能優化心法。

一、為何選擇 JSF + JSFTemplating 作為核心框架

1. 組件化開發契合控制台場景

管理控制台包含大量復雜 UI 組件:文件選擇器、上傳組件、數據表格、麵包屑導航、屬性表單等。JSF 面向組件的模型天然適配此類「重組件、輕頁面」場景,開發者可像搭積木般組裝頁面。

2. JSF 1.2 缺失模板機制,JSFTemplating 彌補關鍵短板

JSF 1.2 無原生模板支持,導致頁面結構復用困難。JSFTemplating 引入:

  • 細粒度事件模型:支撐複雜交互邏輯解耦
  • 可參數化處理函數:實現邏輯復用
  • 頁面作用域:解決跨請求數據共享,避免 Session 濫用
  • 資源流抽象:統一處理靜態資源、動態內容
  • 可定制組件工廠:支撐主題切換、動態組件生成

這些特性與 JSF 豐富組件庫結合,構建出高效開發環境。

二、單元測試:從 Selenium 到 JSFUnit 的演進

版本測試策略工具痛點
GlassFish V2功能測試為主Selenium + QA 自動化單元測試缺失,反饋周期長
GlassFish V3集成到 CI 流水線JSFUnit + Maven + Hudson正在探索中,期望實現真正單元級測試

核心洞見:JSF 單元測試難點在於視圖層與邏輯層耦合,JSFUnit 通過模擬 JSF 生命周期在容器外運行測試,是當前最佳路徑。

三、錯誤診斷:四大實戰技巧

  1. 閱讀源碼:JSF 開源,遇到難解異常直接追蹤源碼(如 UIViewRoot、Application 核心類)
  2. 提交 Issue:官方 Issue Tracker 既能改進框架又能獲得專家幫助
  3. 善用搜索與社區:Google + 論壇 + IRC (irc.freenode.net #jsf),90% 問題已有解
  4. 必放 h:messages:JSF 大量錯誤通過 FacesMessage 機制輸出,缺少此組件等於「盲飛」

四、開發與美工協作:Woodstock 組件庫實踐

  • 標準化設計語言:Woodstock 組件默認實現產品視覺規範,減少 80% 定制工作
  • 分工邊界清晰:美工產出圖片/HTML 原型,開發轉化為 JSF 頁面或自定義組件
  • 新組件委託組件庫團隊:非通用組件優先推給 Woodstock 團隊,急需時自行實現

這種「組件即契約」模式,讓雙方聚焦各自專長。

五、AJAX 應用:Dynamic Faces 實現局部刷新

兩大典型場景:

  1. 麵包屑動態計算:客戶端 JS 計算當前樹節點 → XMLHttpRequest 發送服務端 → 服務端組裝 Woodstock 超鏈接組件 → 返回片段更新頁面
  2. 樹節點增量更新:新建對象時僅刷新受影響分支,避免整棵樹重渲染

技術棧:Dynamic Faces(Ed Burns 領導的 JSF 擴展項目),屬於早期 JSF AJAX 解決方案,現多遷移至 PrimeFaces/OmniFaces 等成熟庫。

六、組件庫選擇與表單擴展

  • 全棧 Woodstock:未自研組件庫,Woodstock 提供完整 JSF 組件套件,滿足本地化、無障礙、主題等企業級需求
  • 自研組件參考:Ken Paulsen(JSFTemplating 作者)的 TheServerSide 文章 展示如何用 JSFTemplating 加速渲染器開發
  • 表單擴展:直接使用 Woodstock 表單組件,通過屬性綁定、驗證器、轉換器實現業務擴展

七、棘手問題排查:組件 Bug 定位三步走

  1. 與組件作者直接溝通(郵件列表/ISSUE)
  2. 論壇/IRC 尋求社區幫助
  3. Google 搜索類似案例

得益於組件廣泛復用,嚴重 Bug 通常已被發現並修復。

八、Session 與作用域管理:避免內存洩漏

  • 原則:能用 Request 就不用 Session
  • 引入 Page Session:隨頁面生命周期綁定數據,頁面跳轉自動銷毀,解決跨請求臨時數據共享
  • 極少數跨頁場景:參數傳遞或極小範圍使用 Session

此策略有效控制內存佔用,避免「殘留數據導致邏輯錯誤」。

九、性能優化建議:按需使用功能

「JSF 提供海量功能,但功能只有在需要時才有價值。」—— Anissa

  • 閱讀權威書籍(如《Core JSF》)建立知識體系
  • 活躍於 #jsf、#jsftemplating IRC 頻道,聆聽專家實戰經驗
  • 針對具體瓶頸優化:視圖狀態壓縮、部分渲染、延遲加載、數據分頁等

十、總結

GlassFish 管理控制台的 JSF 實踐展示了:框架選型服務於業務場景、工程化手段解決框架短板、組件化思維驅動團隊協作、作用域精細化控制資源。這些經驗對當前遷移至 JSF 2.x/3.x、整合 PrimeFaces/OmniFaces 的項目同樣具有指導意義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved