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 保護傘中的幾個規範已經看到了個別的採用,例如通過 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 的供應商支援的 Java 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 市場的很大一部分都受限於供應商的生產產品 - 所有基於 EE 6 的產品 - 在 2015 年。

有關開源專案本身提供的精良生產支援的範例,請參閱 Tomcat。 Tomcat 專案在快速修復錯誤,特別是安全漏洞方面,即使在伺服器的過去三個主要世代中,也擁有令人欽佩的記錄。 因此,我並不是在爭論商業支援本身,而是在爭論像 Tomcat 那樣(我敢說:像 Spring 那樣)進行適當的維護版本,無論是來自開源專案本身還是來自商業支援訂閱。 例如,WildFly 沒有這兩者; GlassFish 沒有 Oracle 的支援,但至少可以通過 Payara 獲得支援選項。

獲取 Spring 電子報

訂閱 Spring 電子報,與我們保持聯繫

訂閱

領先一步

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

了解更多

獲取支援

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

了解更多

即將到來的活動

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

查看全部