Java EE 7 週年快樂!在生產環境中執行得怎麼樣?

新聞 | Juergen Hoeller | 2015 年 6 月 4 日 | ...

請注意,有一篇關於 Spring 5 系統要求 的後續博文。如果您主要對 Spring 5 的規劃過程感興趣,可以從那裡開始。

在我們尋求 Java EE 整合的過程中,我們正積極擁抱最新一代的規範,例如 JPA、Bean Validation,當然還有 Servlet 和 JMS API。截至 Spring 4,我們同時支援 Java EE 6 和 7 級別的規範。我們希望儘快將其提升到 EE 7+ 級別(JPA 2.1、Bean Validation 1.1,特別是 Servlet 3.1 和 JMS 2.0),但面臨一個根本性問題:EE 7 平臺普及率不足。

Java EE 7 平臺已於 2013 年 5 月釋出,因此現在已有兩年曆史。令人驚訝的是,它至今在生產環境中仍很少見。但這也不是那麼令人驚訝:儘管幾年來已有少數專案獲得了 EE 7 認證,但主要供應商的缺失顯而易見:目前還沒有主流的 EE 7 伺服器提供生產支援,無論是 Web Profile 還是完整平臺。截至 2015 年 6 月,常見的 EE 供應商仍在銷售基於 2009 年的 Java EE 6 API 的伺服器許可證。而且不只是傳統的幾家大廠。

  • Tomitribe 為TomEE 1.7 提供支援,這是一個基於 Tomcat 7 的 EE 6 Web Profile 堆疊,基於 2009 年的 EE 6 API,但至少相容 JSR-356 WebSockets 和 JDK 8。TomEE 7.0(最近從 TomEE 2.0 更名而來)將是一個基於 Tomcat 8 的 Java EE 7 Web Profile 產品(截至 2015 年 6 月尚未釋出)。
  • Red Hat 最新的支援產品是JBoss EAP 6.4,這是一個基於 JBoss 7 的 EE 6 堆疊,支援 JSR-356 WebSockets 和 JDK 8。請注意,從 Red Hat 的角度來看,WildFly 是一個研發專案:它有頻繁的功能釋出(為此點贊),但不提供維護髮布或任何形式的生產支援。
  • Oracle 提供了WebLogic 12.1.3,這是一個 EE 6 伺服器,但包含一些 EE 7 的特性(JPA 2.1、JAX-RS 2.0、JSR-356 WebSockets)以及 JDK 8 支援。WebLogic 12.2.1(曾一度宣佈為 12.1.4)作為一個完整的 EE 7 伺服器仍未釋出(截至 2015 年 6 月)。並且從 Oracle 的角度來看,GlassFish 4 只是一個 RI(參考實現),WebLogic 是生產環境的升級路徑。
  • IBM WebSphere 團隊在為WebSphere Liberty Profile(WAS 8.5.5)實現 EE 7 規範方面做得很好,但尚未完成。至少,一些 EE 7 模組和 JDK 8 已在生產環境中得到支援,作為 Liberty Profile 的一種功能包,並且 WebSphere 的完整 Java EE 7 認證很可能在 2015 年內完成。

重磅新聞(6 月 9 日): WAS 8.5.5 的 EE 7 修復包將於 6 月 26 日正式釋出。IBM 棒極了!

儘管 EE 7 umbrella 下的幾個規範已獲得獨立採用,例如透過 Hibernate 4.3 採用JPA 2.1,以及透過 Tomcat 8 和 Jetty 9 採用Servlet 3.1 / JSR-356 WebSockets,但公平地說,Java EE 7 作為平臺整體未能進入市場。畢竟,“平臺”的意義在於廣泛的主流可用性。具有諷刺意味的是,稍後釋出的 JDK 8(2014 年 3 月)卻在生產環境中得到了快速擁抱,甚至在 EE 領域!因此,截至 2015 年中期的現狀是,在生產環境中執行著基於 JDK 8 的 EE 6 伺服器,並有供應商支援……

我們的決定: 考慮到 Spring 4 和 Java 8 的普及程度,我們將在 Spring Framework 5 代中將最低要求提升到 JDK 8+。然而,由於 Java EE 7 平臺普及率不足,我們將不得不保留與當前一代應用伺服器的相容性:允許即將推出的 Spring 5 應用程式部署到生產環境中常見的基於 JDK 8 的 EE 6 伺服器上——就像我們現在對 Spring 4 所做的那樣,但至少我們可以在框架程式碼庫及其所有核心介面上獲得 JDK 8+ 的額外好處。

附註(6 月 6 日)

僅供參考,我非常欣賞GlassFishWildFly 作為開源工程的努力。Spring 為兩者都提供了專門的支援,而Undertow HTTP 伺服器(位於 WildFly 之下)非常適合與 Spring Boot 進行嵌入式部署。但這並不能改變專案所有者(分別是 Oracle 和 Red Hat)不願支援它們,而是選擇投資 WebLogic 12 和 JBoss EAP 6 用於生產環境的事實。來自 Payara(針對 GlassFish)等公司的外部支援只能在一定程度上緩解這種情況,而 Java EE 市場的大部分在 2015 年仍然依賴於供應商的生產產品——所有這些都基於 EE 6。

對於來自開源專案本身的出色的生產支援的例子,看看Tomcat 就可以了。Tomcat 專案在修復錯誤,特別是安全漏洞方面有著令人稱讚的記錄,而且速度非常快,即使是跨越了伺服器過去三個主要版本。所以我並不是在主張商業支援本身,我是在主張像 Tomcat(而且敢說:像 Spring)那樣進行適當的維護髮布,無論是來自開源專案本身還是來自商業支援訂閱。例如,WildFly 這兩者都沒有;GlassFish 沒有來自 Oracle 的支援,但至少有 Payara 的支援選項。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有