JBoss釋出了支援Groovy並增強了JSF的Seam 2.0
- WebServices——Web service可以是會話式的,而且可以利用Seam的元件和服務。
- Groovy——可以用Groovy寫Seam元件
- 熱部署——在開發模式下,Seam可以熱部署元件定義而無需重新部署整個WAR或者EAR。
- 支援Eclipse——在JBossTools中對Seam 2的支援包括專案嚮導,整合測試,JBoss EL自動完成,檢視頁面的視覺化編輯等等功能。
- 不依賴於JSF——Seam已經與JSF解耦,現在它可以更方便的與其他web框架整合。實驗性的與GWT整合的原型已經完成了,我們可以看到Seam如何與GWT協同工作。
- 支援JSF 1.2——Seam已經把它的預設JSF實現從myfaces切換到JSF RI。
- JBoss EL ——Seam提供了對JBoss EL的支援,支援引數化繫結、非JavaBean屬性與投影。
- Maven——Seam自己的依賴關係由Maven管理。有一個Maven repository是可用的。
- 整合——Seam可以與許多流行的專案整合,例如Quartz,JFreeChart,Hibernate Search和iText
我認為在1.0中我犯的最大的錯誤是:接下來King比較了JSF元件技術與把整個表現層放在瀏覽器中的技術,例如ExtJS:(1)開發Seam的時候假設使用環境為JSF,EJB3和JTA。這些技術毫無疑問都是非常流行的,但是仍然有很多人要求在其他環境中使用Seam,他們推動我們開放了Seam的實現,現在Seam可以支援其他環境。
(2)沒有認識到我們內建的元件庫會增長的如此龐大。在早期的版本中,我天真的把所有內建的元件放在org.jboss.seam.core包中。在Seam 2中我們不得不徹底重新組織了包結構。
我認為我們主要需要考慮兩點:InfoQ然後詢問了關於新的Web Beans JSR的話題:
(1)你喜歡用宣告式的方式還是程式設計式的來定義使用者介面?
(2)在客戶端到底有多少功能可以被真正執行?
還有一個問題,你希望的型別安全是什麼樣的。
所有這些問題幾乎都是正交的。例如,GWT提供型別安全的,程式設計式的,客戶端的方案。另一方面,Wicket提供型別安全的,程式設計式的,伺服器端的方案。
JSF在某種程度上是型別安全的,宣告式的,伺服器端的方案,如果需要的話,你也可以選擇程式設計式的方式。每種方式都有它自己的優缺點,但是我認為JSF的方法是強迫性的:首先,我必須用一種宣告式的語言來定義使用者介面。使用者介面本質上是分層的,而我希望我的程式碼結構能夠反映這種本質。我對於使用swing風格的 程式碼來建立使用者介面總是覺得彆扭。這種程式碼看起來總是很醜陋而且難以維護——有點象通過遍歷DOM樹來解析XML的Java程式碼。這裡存在基本的結構性的 斷層。
對於使用者介面中動態性強的部分,程式設計式的操作當然更有效。但是,動態性強的部分是很少的。除了個人控制級別的介面以外,大多數使用者介面是靜態的。而JSF 在處理動態性的介面時也是很強大的,它允許你在Java程式碼中直接操縱JSF元件。當然,你可以選擇使用JavaScript程式碼來操作瀏覽器中的DOM 物件。(總有一天,有人會建立一個JSF實現,使得客戶端可以訪問JSF元件樹,但是我們現在沒有實現這個功能。)
其次,我不認為把更多的狀態和應用邏輯放在客戶端執行會減少很多開發工作。有太多事情只能在伺服器端有效的處理:持久化,安全,資料級別的併發,等等。如 果你把試圖把你的應用程式碼放到客戶端,那麼你最終會回到我們3、4年前的狀態,會有這樣一種架構,其特點是:有一個無狀態的服務層,一些資料傳輸物件,細 粒度的手工方式的獲取資料以及合併資料變化。這是痛苦的程式設計模式,我們採用有狀態的元件和會話範圍的持久化上下文——這兩種都是伺服器端技術——剛剛從其中逃脫。
使用RichFaces和Seam,你可以建立這樣的使用者介面:非同步的獲取資料,互動式的更新檢視,非同步的響應使用者互動,互動式的應用變化,這些動作都處 於一個良好定義的樂觀事務中,沒有任何煩人的重複工作。當然,學習JSF和RichRaces比使用其他方式要多花一些時間,但是從長期來看這些代價是物 有所值的。
我所認為的JSF方式的最大的弊端目前很少被提及:使用EL把檢視繫結到模型時缺乏型別安全。我理想的環境應該支援一種真正型別安全的宣告式語言來定義使用者介面。可惜,Java不能真正支援建立這樣的DSL。遺憾。
Web Beans有許多思想是從Seam得來的:與此同時,Web Beans還從Guice"剽竊"了基於註釋繫結的依賴注射思想,這導致了影響深遠的後果。
- 上下文相關的元件
- 會話
- 按照優先順序規則的元件覆蓋
- 與Java EE的深度整合
- 基於註釋繫結的攔截器繫結
- 事件通知
Web Bean集這些思想之大成而形成了一個非常獨特的程式設計模型,該模型強調“鬆耦合與強型別”。你可以利用Web Bean的優勢完成一個非常鬆耦合的應用:
所有這些功能都沒有犧牲型別安全。所有的工作都是通過型別安全的註釋完成的——沒有隱藏起來的字串,準備在執行時突然咬你一口:-)總的來說,Web Beans建立在Seam的傳統之上,但是我相信它是一個更加強制性的模型。我有一個出色的專家組保佑著:-)
- 使用上下文相關的生命週期管理(有狀態的元件象service一樣相互互動)來解耦客戶端和伺服器端的生命週期
- 使用部署時元件覆蓋來解耦客戶端與伺服器端的實現
- 使用事件通知來解耦訊息生產者與消費者
- 使用攔截器來解耦橫切(技術上的)關注點
最後,我們問起King在使用Seam開發新的執行在in.relation.to上的wiki時,團隊是否發現了Seam框架的一些漏洞:
我們發現了一些bug和小的限制。但是開發Wiki帶來的最大影響是激勵我們為Seam開發一個外掛架構。這裡我們所指的外掛,是類似於portlet那樣的東西,只是不那麼弱智。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-244085/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HttpReports 2.0 釋出了 !!!HTTP
- Hyperledger Fabric 2.0 Alpha釋出了!
- 飛冰 2.0 正式釋出並支援 Vue 專案開發Vue
- IDEA 2022.2.1 Beta 2釋出:新增支援Java 18、增強JUnit 5的支援IdeaJava
- IDEA 2024.1:Spring支援增強、GitHub Action支援增強、更新HTTP Client等IdeaSpringGithubHTTPclient
- 擼了一個 Feign 增強包 V2.0 升級版
- Robotgo v0.70.0 釋出了, Go 桌面自動化, 增強 keyboard 和 mouse 操作OTGGo
- Kraken v0.8.0 釋出 — 支援 Flutter 2.0Flutter
- go-carbon 1.1.0版本釋出了,增加對gorm的支援GoORM
- Dio 3.0釋出,支援Flutter Web 和 Http/2.0FlutterWebHTTP
- 等保2.0正式釋出了嗎?核心思想包括什麼?
- Gitea 1.11.1 釋出了,修復了 14 個 bugGit
- ABAP TEST-SEAM 的使用方法
- K8S 生態週報| Helm 新版本釋出增強對 OCI 的支援K8S
- 我的OpenAI庫釋出了!!!OpenAI
- IDEA 利用groovy指令碼生成註釋Idea指令碼
- TinyVue v3.17.0 正式釋出,推出了一款基於 Quill 2.0 的富文字編輯器,功能強大、開箱即用!VueUI
- Mac觸控板增強神器支援big surMac
- LightDB23.1新特性支援Oracle hint增強DB2Oracle
- go-carbon 1.2.0 版本釋出了,完善優化對ORM的多場景支援Go優化ORM
- 《TypeScript 教程》釋出了TypeScript
- Wine 5.0 釋出了!
- ApkToolBoxGUI 0.0.8釋出了!!APKGUI
- KunlunBase 1.0 釋出了!
- Java 18釋出了Java
- Istio 1.12 釋出了!
- PHP 8 釋出了PHP
- PHP 8.0.0釋出了!PHP
- Spring AI 更新:支援OpenAI的結構化輸出,增強對JSON響應的支援SpringOpenAIJSON
- 替代 Trello 的 OpenProject 9 釋出了Project
- Gse v0.30.0 釋出了, Go 高效能分詞, 增加 hmm 支援GseGo分詞HMM
- 如何在Net6.0裡配置多版本支援並支援註釋說明的SwaggerSwagger
- BetterTouchTool for Mac(觸控板增強神器)支援big surMac
- Go-carbon 1.1.1版本釋出了,完善對主流ORM的支援,新增公共方法GoORM
- go-carbon 1.2.0 版本釋出了,完善最佳化對ORM的多場景支援GoORM
- Bootstrap 釋出了個 v3.4 版本?是不是搞錯了?boot
- 分散式圖資料庫 Nebula RC2 釋出:增強了 CSV Importer 功能分散式資料庫Import
- 剛剛,Python 3.10 正式釋出了!我發現了一個可怕的功能...Python
- Metasploit釋出了版本5.0.76