Spring For JavaServerFaces - TSSJS 投影片和示範

工程 | Keith Donald | 2008年3月27日 | ...

今天我在拉斯維加斯的 TSSJS 上發表一篇題為Spring for Java Server Faces的演講。該演講探討了 JSF 和 Spring 如何協同工作,並引導觀眾了解整合這兩種技術的方法。

這些投影片可供您瀏覽,並可隨意使用。

在演講中,我概述了整合 JSF 和 Spring 的兩種方法。第一種方法我稱之為“以 JSF 為中心”,這是當今大多數具有傳統 JSF 背景的人採用的整合方法。第二種方法我稱之為“以 Spring 為中心…

在 Spring MVC 中使用混合註釋 & XML 方法進行請求映射

工程 | Rossen Stoyanchev | 2008年3月24日 | ...

在 Spring 2.5 中,可以使用註釋來配置 Web 應用程式的所有部分。在 Web 層中,開發人員傳統上依賴 SimpleFormController 和 MultiActionController 進行表單頁面處理,因此應用註釋特別有趣。註釋的引入創造了第三種選擇,它不需要基類,同時仍提供先前方法的靈活性。

雖然很容易看到使用註釋的 POJO 來實現控制器的優雅之處,但在 URL 到控制器的區域,其好處並不明顯…

SpringSource Tool Suite 發布

工程 | Christian Dupuis | 2008年3月20日 | ...

今年的EclipseCon是我們公司首次參加。我們有很多演講,都受到了好評,並且我們宣布了 SpringSource Tool Suite測試計劃。總的來說,我們都過得很愉快,並且從 Eclipse 社群獲得了關於 Spring Portfolio 中專案的許多反饋,特別是我們在 Web 領域所做的事情。我將確保在未來幾週內將所有反饋轉發給專案負責人。由於 EclipseCon 今天即將結束,我終於有時間坐下來寫一些關於我們在會議上介紹的內容。

在星期一的BoF上,我們揭開了 SpringSource Tool Suite (STS) 的個人使用版,我花了很多時間與人們交談和發郵件,討論它帶來的額外價值。在本部落格中,我將更詳細地概述 SpringSource Tool Suite 的功能。首先,我已經聽過很多次,人們認為 SpringSource Tool Suite 的發布意味著我們將停止改進和塑造 Spring IDE。請讓我說明,絕對不是這樣;實際上情況恰恰相反,透過查看 Spring IDE JIRA 和 Subversion 儲存庫已經可以明顯看出。事實上,自從我一月份加入 SpringSource 以來,我已經能夠增加我花在 Spring IDE 上的時間,同時並行地處理工具套件。

SpringSource Tool Suite 的目標是為您提供最先進的開發工具,用於在 Eclipse 平台上使用 Spring Portfolio 進行企業開發 - 聽起來像是行銷術語,但這是工具團隊致力於實現的使命宣言。STS 肯定建立在經過驗證的 Spring IDE 之上,但它與 Eclipse Mylyn 深入結合,並且已經擴展了這兩種開源工具,將企業級擴展帶入您的 IDE。為了提供可用的最佳 Spring 工具,我們已經開始並繼續將與工具相關的功能、掛鉤和擴展點添加到 Spring 核心框架和其他 Spring 專案中。

因此,使用工具套件,您終於可以獲得 Mylyn 的任務導向使用者介面的所有優勢,用於進行 Spring 開發。在處理 Spring 應用程式藍圖時,您可以獲得上下文管理和聚焦。此外,我們將任務導向 UI 方法提升到一個新的層次,並引入了一種名為任務導向教學課程的新技術。任務導向教學課程擴展了 Eclipse Cheat Sheet 框架,並為教學課程的每個步驟新增了任務聚焦。透過任務導向教學課程,使用者 - 對 Spring 不熟悉的人,或者想要學習特定功能或 Spring 專案的人 - 將能夠透過單擊匯入一個正在運行的範例應用程式,並開始探索該範例。然後,每個教學課程步驟將提供對教學課程特定方面的解釋,並且僅顯示那些與理解和探索該解釋相關的 Java 和 Spring 元素。

Task-Focused Tutorials

從上面的螢幕截圖中,您可以看到它在 Eclipse 中的樣子。教學課程將 PetClinic 範例應用程式帶入 Eclipse 工作區,並聚焦工作區以僅顯示 @Autowired 註釋以及它如何應用於應用程式元件。在右側,您可以看到展開的步驟,其中解釋了如何以及為什麼應該使用 @Autowired 註釋。在教學課程的最後,使用者能夠在自動安裝和配置的捆綁 Tomcat 伺服器上啟動範例應用程式;再次,只需單擊一下。

我們認為這種介紹新功能和產品的方式是一種非常強大的方法,並且使人們可以很容易地探索 Spring Portfolio。開發人員入門時需要擁有和知道的一切都在它應該在的地方:IDE 內部。當您下載個人使用版 Beta 時,您將可以立即訪問大約 20 個教學課程,這些教學課程都是由專案負責人或直接與客戶合作的經驗豐富的顧問創建的。最值得注意的是 Adrian Colyer 花時間創建了 7 個教學課程,介紹了 OSGi 概念、Equinox 和 Spring Dynamic Modules。如果您現在想跳上 OSGi 的列車,這些教學課程真的很酷。該工具套件包含一個自動 OSGi 捆綁更新/刷新機制,最終允許您處理應用程式,並根據 OSGi 運行時的強大功能獲得即時重新部署語義(您是否曾經嘗試過使用 EJBs 執行此操作;我做過)。

我想談論的下一個功能稱為運行時錯誤分析:SpringSource Tool Suite 能夠透過分析 Java 堆疊追蹤來提供有關如何解決運行時問題的信息。為了實現這一點,我們創建了一個線上知識庫,該知識庫已整合到該套件中,並在 Eclipse IDE 內部進行查詢。該知識庫對每個使用該工具的人都是開放的,我們甚至鼓勵人們使用內建的豐富編輯功能來貢獻他們自己的分析。看看下面的螢幕截圖。

Runtime Error Analysis

使用該工具套件,您不僅可以獲得分析運行時錯誤的支援,而且該工具還將幫助您找到常見的陷阱違反 Spring 最佳實踐的地方。尤其是在處理 XML bean 定義檔案時,此功能非常方便,因為它會在 XML 編輯器中告知開發人員該檔案中可能需要修改的地方。例如,該工具將在某些情況下檢測並建議使用 bean 繼承。它還將建議使用不斷改進的命名空間元素,而不是使用傳統風格的 bean 定義。這是一個例子

Runtime Error Analysis

讓我們看看我們得到了什麼

  • Spring 開發工具
  • Mylyn 的任務導向使用者介面,適用於 Java、資源和 Spring 應用程式藍圖
  • 任務導向教學課程
  • 運行時錯誤分析
  • 最佳實踐和架構審查工具

還有更多我沒有提到的功能。您是否看到此功能列表中的主題?最後列出的三個功能為開發基於 Spring 的強大應用程式提供了寶貴的幫助。在內部,我們開始使用這個功能集的一個比喻:盒子裡的顧問。透過 SpringSource Tool Suite,我們希望讓您能夠獲得 SpringSource 知識,就像您身邊坐著一位顧問一樣!

我想鼓勵大家前往 beta 註冊頁面並試用 Tool Suite。最後,我也要感謝所有已經提交反饋、問題和建議的人。我將在本週 EclipseCon 結束後盡快回复大家。

Spring 依賴注入 & Java 5(包括投影片和代碼)

工程 | Alef Arendsen | 2008年3月18日 | ...

我正在前往開羅的路上寫這篇文章。我們正飛往義大利的西邊,我可以清楚地看到義大利的海岸線,蔚藍的海水和海浪輕輕地向岸邊移動。現在那裡一定很棒。我將前往開羅參加 埃及使用者群組 的會議,該會議由 Ahmed Hashim 組織,毫無疑問,他一定做得非常出色,我對此深信不疑。我將以依賴注入、類型安全和 Java 5 為主題介紹 Spring。昨天(也就是 3 月 14 日),我在荷蘭 Loenen 的 Profict Wintercamp 上向聽眾做了幾乎相同的演講…

Spring Web Flow 2.0 M4 - 請求反饋

工程 | Keith Donald | 2008年3月11日 | ...

Web Flow 團隊一直在努力開發 Web Flow 2。我們剛剛完成了我們的 第 4 個里程碑,並將在下週初進入候選版本狀態。2.0 最終版本計劃在本月底發布。

在現在到 2.0 最終版本之間,我們希望獲得您的反饋!如果您是目前正在使用 Web Flow 1.x 的應用程式開發人員,或者正在評估 Web Flow 以用於您的專案,請評估 2.0 M4告訴我們您的想法。如果您是將 Web Flow 引擎整合到您的框架中的 Web 框架供應商,我們鼓勵您評估 2.0 M4 中的改進掛鉤,並且…

在 GWT 客戶端代碼中啟用測試驅動開發

工程 | Iwein Fuld | 2008年2月19日 | ...

在過去的幾個月裡,我一直與使用 Google Web Toolkit [GWT] 的各種客戶合作。我主要因為 Java 到 javascript 編譯器而喜歡 GWT。這是讓凡人 Java 開發人員創建 RIA 而無需學習一門新語言的關鍵。

我一直是測試驅動開發的粉絲,但起初我感到失望的是,TDD 和 GWT 似乎不會一起工作。

測試 GWT 代碼有點問題。問題的核心是 GWT 代碼在運行之前會編譯成 javascript。在許多情況下,GWT.create() 語句…

建立 OSGi 捆綁包

工程 | Costin Leau | 2008年2月18日 | ...

在接觸 OSGi 時,必須學習的第一個概念是捆綁包的概念。在本條目中,我想更仔細地了解捆綁包實際上是什麼,以及如何將普通的 jar 轉換為 OSGi 捆綁包。所以,事不宜遲,

什麼是 Bundle?

OSGi 規範將 Bundle 描述為「模組化的單元」,它「由 Java 類別和其他資源組成,這些資源共同為最終使用者提供功能」。到目前為止還不錯,但 Bundle 到底是什麼?再次引用規範:

一個 Bundle 是一個 JAR 檔案,它

  • 包含 [...] 資源
  • 包含一個 Manifest 檔案,描述 JAR 檔案的內容並提供關於 Bundle 的資訊
  • 可以在 JAR 檔案的 OSGI-OPT 目錄或其子目錄之一中包含選擇性的文件

簡而言之,一個 Bundle = jar + OSGi 資訊 (在 JAR Manifest 檔案中指定 - META-INF/MANIFEST.MF),不需要額外的檔案或預定義的資料夾佈局。這意味著從一個 jar 檔案建立一個 Bundle,只需將一些條目新增到 JAR Manifest 即可。

OSGi 元數據

OSGi 元數據由 Manifest 條目表示,這些條目指示 OSGi 框架 Bundle 提供或/和需要什麼。 該規範指示大約 20 個 Manifest 標頭,但我們只會查看您最有可能使用的標頭。

Export-Package

顧名思義,這個標頭指示 Bundle 中可用的哪些套件 (packages) 被匯出,以便它們可以被其他 Bundle 匯入。只有這個標頭指定的套件會被匯出,其餘的將是私有的,並且不會在包含 Bundle 之外可見。

Import-Package

類似於 Export-Package,這個標頭指示 Bundle 匯入了哪些套件。同樣,只有這個標頭指定的套件會被匯入。預設情況下,匯入的套件是強制性的 - 如果匯入的套件不可用,匯入 Bundle 將無法啟動。

Bundle-SymbolicName
唯一必需的標頭,這個條目指定了 Bundle 的唯一識別碼,基於反向網域名稱慣例(也用於 Java 套件)。
Bundle-Name
為這個 Bundle 定義一個人類可讀的名稱,沒有空格。建議設定此標頭,因為它可以提供比 Bundle-SymbolicName 更短、更有意義的關於 Bundle 內容的資訊。
Bundle-Activator
BundleActivator 是一個 OSGi 特定的介面,允許在 OSGi 框架啟動或停止 Bundle 時通知 Java 程式碼。 這個標頭的值應該包含 activator 類別的完整限定名稱,該類別應該是公開的並且包含一個沒有任何引數的公開建構子。
Bundle-Classpath
當 jar 檔案包含嵌入式程式庫或各個資料夾下的類別套件時,這個標頭非常有用,它會擴充預設的 Bundle 類別路徑(預期類別直接位於 jar 檔案根目錄下)。
Bundle-ManifestVersion
這個鮮為人知的標頭指示要用於讀取此 Bundle 的 OSGi 規範。 1 表示 OSGi 版本 3,而 2 表示 OSGi 版本 4 及更高版本。由於 1 是預設版本,因此強烈建議指定此標頭,因為 OSGi 版本 4 的 Bundle 在 OSGi 版本 3 下無法按預期工作。

下面是一個範例,取自 Spring 2.5.x 核心 Bundle Manifest,它使用了上面提到的一些標頭

 
Bundle-Name: spring-core 
Bundle-SymbolicName: org.springframework.bundle.spring.core 
Bundle-ManifestVersion: 2 
Export-Package:org.springframework.core.task;uses:="org.springframework.core,org.springframework.util";version=2.5.1 org.springframework.core.type;uses:=org.springframework.core.annotation;version=2.5.1[...] 
Import-Package:org.apache.commons.logging,edu.emory.mathcs.backport.java.util.concurrent;resolution:=optional[...] 

在 OSGi 元數據上花費的大部分時間可能都花在 Export/Import 套件條目上,因為它們描述了 Bundle 之間的關係(也就是說,模組之間的關係)。 談到套件,沒有什麼是隱含的 - 只有提到的套件會被匯入/匯出,其餘的則不會。這也適用於子套件:匯出 org.mypackage 將匯出 這個套件,而不會匯出其他任何東西(例如 org.mypackage.util)。 匯入也是如此 - 即使一個套件在 OSGi 空間中可用,除非它被顯式匯入,否則它不會被某個 Bundle 看到。

總結一下,如果 Bundle A 匯出套件 org.mypackage,並且 Bundle B 想要使用它,那麼 Bundle A 的 META-INF/MANIFEST.MF 應該在其 Export-Package 標頭中指定該套件,而 Bundle B 應該將其包含在其 Import-Package 條目中。

套件考量

雖然匯出相當簡單,但匯入稍微複雜一些。 應用程式通常會透過搜尋環境中是否存在某些程式庫,然後只使用可用的程式庫來優雅地降級,或者程式庫會包含使用者不使用的程式碼。 這樣的例子包括記錄 (使用 JDK 1.4 或 Log4j)、正則表達式 (Jakarta ORO 或 JDK 1.4+) 或並發實用程式 (JDK 5 中的 java.util 或 backport-util-concurrent 適用於 JDK 1.4 的程式庫)。

在 OSGi 術語中,基於套件的可用性來依賴它會轉化為選擇性的 Package-Import。 在前面的範例中,您已經看到了這樣一個套件

```code Import-Package: [...]edu.emory.mathcs.backport.java.util.concurrent;resolution:=optional ```

由於在 OSGi 中,同一類別的多個版本可以存在,因此最好在匯出和匯入套件時都指定類別套件的版本。 這可以透過在每個套件宣告後新增 version 屬性來完成。 OSGi 支援的版本格式是 <major>.<minor>.<micro>.<qualifier>,其中 majorminormicro 是數字,而 qualifier 是字母數字。

版本的含義完全取決於 Bundle 提供者,但是,建議使用流行的編號方案,例如來自 Apache APR 專案的 這個方案,其中

  • <major> - 表示一個重大的更新,不保證任何相容性
  • <minor> - 表示一個更新,它保留了與較舊次要版本的相容性
  • <micro> - 表示從使用者角度來看的微不足道的更新,它在向前和向後方向上都是完全相容的
  • <qualifier> - 是使用者定義的字串 - 它沒有被廣泛使用,可以為版本號提供額外的標籤,例如建置編號或目標平台,而沒有標準化的含義

預設版本(如果屬性遺失)是「0.0.0」。

雖然匯出的套件必須指示一個特定的版本,但匯入器可以使用數學間隔符號來指示一個範圍 - 例如

[1.0.4, 2.0) 將匹配 1.0.42 及以上的版本,直到 2.0(不包括)。請注意,指定一個版本而不是一個間隔將匹配所有大於或等於指定版本的套件,也就是說

Import-Package: com.mypackage;version="1.2.3"

等同於

Import-Package: com.mypackage;version="[1.2.3, ∞)"

作為最後一個提示,請確保在指定版本時始終使用引號,無論它是一個範圍還是一個單獨的版本。

使用 OSGi 元數據

現在我們已經有了一些關於 Bundle 的資訊,讓我們看看我們可以使用哪些工具來 osgi-fying 現有的 jar 檔案

手動

不鼓勵使用這種自己動手做的方法,因為拼寫錯誤和額外的空格很容易潛入並使 Manifest 無用。即使使用智慧型編輯器,Manifest 格式本身也會引起一些問題,因為它每行限制為 72 個空格,如果被打破,可能會導致一些難以理解的問題。手動建立或更新 jar 檔案不是一個好主意,因為 jar 格式要求 META-INF/MANIFEST.MF 條目是存檔中的第一個條目 - 如果不是,即使它存在於 jar 檔案中,Manifest 檔案也不會被讀取。手動方法確實建議用於沒有其他替代方案的情況。

但是,如果有人真的想要/需要直接使用 Manifest 檔案,那麼應該使用一個可以處理 UNIX/DOS 空格的編輯器以及一個適當的 jar 檔案建立實用程式(例如 JDK 附帶的 jar 工具)來處理所有 MANIFEST 要求。

Bnd

Bnd 代表 BuNDle 工具,是由 Peter Kriens(OSGi 技術負責人)建立的一個很好的實用程式,它可以「幫助 [...] 建立和診斷 OSGi R4 Bundle」。 Bnd 解析 Java 類別以了解可用的和匯入的套件,因此它可以建立等效的 OSGi 條目。 Bnd 提供了一系列指令和選項,可以自訂產生的工件。 Bnd.jar 本身的好處是它可以透過 命令列、透過專用的 任務由 Ant 執行,或者整合到 Eclipse 中作為一個 外掛程式

Bnd 可以從類別路徑或 Eclipse 專案中可用的類別建立 jar 檔案,或者可以透過新增所需的 OSGi 工件來 osgi-fy 現有的 jar 檔案。 此外,它可以列印和驗證給定 jar 檔案的 OSGi 資訊,使其成為一個非常強大但易於使用的工具。

第一次使用的使用者可以使用 Bnd 來查看將哪些 OSGi Manifest 新增到普通的 jar 檔案中。 讓我們選擇一個普通的 jar 檔案,例如 c3p0(這是一個優秀的連線池程式庫)並發出列印指令

```code java -jar bnd.jar print c3p0-0.9.1.2.jar ```

輸出相當大,包含幾個部分

  1. 通用 Manifest 資訊
    [MANIFEST c3p0-0.9.1.2.jar]
    Ant…

Spring Batch 最近的變更和即將推出的 m4 版本

工程 | Dave Syer | 2008 年 2 月 4 日 | ...

我們一直在努力開發 Spring Batch,為 Spring Portfolio 2.5 版本做準備,我想現在是時候向大家更新一下正在發生的事情了。 在這篇文章中,我將擴充一些關於域建模的內容,以及我們決定提高一些核心域物件的知名度並增加它們的職責。 我還將介紹一下接下來的幾個版本中即將推出的一些內容,以便人們有機會發表評論。

順便說一句:內部結構發生了一些非常重大的變化…

一些決定很容易 - 就像 SpringSource 收購 Covalent 一樣

工程 | Rod Johnson | 2008 年 1 月 29 日 | ...

我的上一篇部落格顯示 Spring 如何超越 EJB。BZ Media 和其他機構的研究顯示,Apache Tomcat 是領先的開放原始碼應用程式伺服器,擁有 64% 的市場佔有率。Spring 和 Tomcat 的優勢是眾所周知的。但人們可能不太清楚的是,數千家組織正在 Tomcat 上運行 Spring 作為他們的中介軟體基礎架構。這些組織希望有一家公司可以提供他們成功所需的產品和服務。

今天我們宣布收購 Covalent Technologies。Covalent 不僅帶來了 Apache 的領導地位,我們合併後的公司現在在 Apache Tomcat 和 HTTP 上也擁有重要的領導地位。兩週前,Sun 花了 10 億美元收購了 LAMP 中的“M”。現在,Covalent 出色的 Apache 專業知識和服務是 SpringSource 的一部分,我們是 “A” 的強大領導者。我們一直致力於技術領先地位,因此我們對與 Covalent 合作可以做的事情感到非常興奮。在過去的幾年中,Covalent 在市場上贏得了良好的聲譽,它支援 Apache 專案,包括 Tomcat 和 Apache HTTP。它的數百個支援客戶包括超過一半的《財富》500 強企業,以及像輝瑞、嬌生、英國電信 (BT)、NASA、英特爾、蘇格蘭皇家銀行和 Bear Stearns 等家喻戶曉的品牌。我們的公告...

Spring 2.5 的全面註解支援

工程 | Juergen Hoeller | 2008 年 1 月 28 日 | ...

Spring 2.5 背後的核心主題之一是全面的基於註解的配置。我們已經談論並撰寫了很多關於 @Autowired、關於 Spring MVC 的 @RequestMapping,以及關於使用 JUnit4 或 TestNG 撰寫的帶註解測試的新支援。@Autowired 無疑是 Spring 2.5 註解中的核心,可用於服務元件、Web 元件、單元測試——甚至在使用 Spring 的 @Configurable 與 AspectJ 編織時的域物件。Spring MVC 的 @RequestMapping 同樣靈活,支援處理器方法簽名的許多變體。

今天我...

取得 Spring 電子報

透過 Spring 電子報保持聯繫

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看所有