21 世紀(jì)初,Spring 框架的誕生和崛起讓沉重而腐朽的 J2EE 遭到了當(dāng)頭棒喝,隨后大批開發(fā)人員轉(zhuǎn)投 Spring 陣營,呼吸間就讓 J2EE 陣營大傷元氣。然而這種命懸一線的危機并沒有造成毀滅性的打擊,尤其是對于 Java 這種提倡開放的平臺而言,取長補短,互相促進才是正道。于是,JCP 委員會痛定思痛,在 2006 年推出 Java EE 5 規(guī)范,主要是對 EJB 的開發(fā)進行了極大幅度的簡化。2008 年發(fā)布的 Java EE 6 引入了 CDI、BV、JAX-RS 等一系列新功能,并且以配置文件(profile)的方式讓 Java EE 向輕量級邁進了一步。特別有趣的是,Spring 框架也開始提供對某些 Java EE 注解的支持,是否標(biāo)志著兩大陣營開始合流?Java EE 7 預(yù)定于今年下半年發(fā)布,目標(biāo)是支持云計算。最近幾年來,云計算一直被炒作,卻從來沒有一個準(zhǔn)確的定義和規(guī)范,希望 Java EE 7 能夠在 Java 界扭轉(zhuǎn)這種尷尬的局面。
下面開始詳細(xì)列舉 Java EE 7 的新功能前瞻,數(shù)據(jù)來源于《Java Magazine 2012-01/02》中的《Cloud/Java EE: Looking Ahead to Java EE 7》一文。Java EE 7 是以“日期驅(qū)動”的方式開發(fā)的,也就是說,在計劃日期到達(dá)前沒有完成的功能都將被推遲到 Java EE 8。
Java EE 7(JSR-342)
- 主題:讓應(yīng)用程序能夠在私有或公共云上容易地運行。
- 該平臺將定義一個應(yīng)用程序元數(shù)據(jù)描述符,以描述 PaaS 執(zhí)行環(huán)境(例如多租戶、資源共享、服務(wù)質(zhì)量,以及應(yīng)用程序間的依賴)。
- 支持 HTML5、WebSocket、JSON 等新標(biāo)準(zhǔn),并為它們一一提供 API。
- 消除受管 Bean、EJB、Servlet、JSF、CDI 和 JAX-RS 之間不一致的地方。
- 可能在 Web 配置文件中包含 JAX-RS 2.0 和 JMS 2.0 API 修訂版。
- 更新一些現(xiàn)有的技術(shù),可能引入用于 Java EE 的并發(fā)工具(JSR-236)和 JCache(JSR-107)。
Java Persistence 2.1(JSR-338)
- 支持多租戶。
- 支持存儲過程和廠商函數(shù)。
- 用規(guī)則(Criteria)進行更新和刪除。
- 支持?jǐn)?shù)據(jù)庫大綱(Scheme)的生成。
- 持久化上下文的同步。
- 偵聽器中的 CDI 注入。
JAX-RS 2.0: The Java API for RESTful Web Services(JSR-339)
- 客戶端 API——底層使用構(gòu)建者模式,可能提供上層封裝。
- 超媒體——輕松創(chuàng)建和處理關(guān)聯(lián)了資源的鏈接。
- 使用 Bean 驗證框架來驗證表單或查詢參數(shù)。
- 與
@Inject
更緊密集成。
- 服務(wù)端的異步請求處理。
- 使用“qs”進行服務(wù)端的內(nèi)容協(xié)商。
Java Servlet 3.1(JSR-340)
- 為 Web 應(yīng)用程序優(yōu)化 PaaS 模型。
- 用于安全、會話和資源的多租戶。
- 基于 NIO2 的異步 I/O。
- 簡化的異步 Servlet。
- 利用 Java EE 并發(fā)工具。
- 支持 WebSocket。
Expression Language 3.0(JSR-341)
- 將
ELContext
分離為解析和求值上下文。
- 可定制的 EL 強迫規(guī)則。
- 在 EL 表達(dá)式中直接引用靜態(tài)方法和成員。
- 添加運算符,例如等于、字符串連接和取大小。
- 與 CDI 集成,例如在表達(dá)式求值前/中/后生成事件。
Java Message Service 2.0(JSR-343)
- 簡化開發(fā)——改變 JMS 編程模型,讓應(yīng)用程序開發(fā)變得更加簡單容易。
- 清除/澄清現(xiàn)有規(guī)范中的模糊之處。
- 與 CDI 集成。
- 澄清 JMS 和其他 Java EE 規(guī)范之間的關(guān)系。
- 新的強制性 API允許任何 JMS 提供者能與任何 Java EE 容器集成。
- 來自平臺的多租戶和其他云相關(guān)的功能。
JavaServer Faces 2.2(JSR-344)
- 簡化開發(fā)——使配置選項動態(tài)化,使復(fù)合組件中的
cc:interface
可選,F(xiàn)acelet 標(biāo)記庫的速記 URL,與 CDI 集成,JSF 組件的 OSGi 支持。
- 支持 Portlet 2.0 橋(JSR-329)的實現(xiàn)。
- 支持 HTML5 的功能,例如 HTML5 表單、元數(shù)據(jù)、頭部和區(qū)段內(nèi)容模型。
- 流管理,頁面導(dǎo)航事件的偵聽器,以及
fileUpload
和 BackButton
等新組件。
Enterprise JavaBeans 3.2(JSR-345)
- 增強 EJB 架構(gòu)以支持 PaaS,例如多租戶。
- 對在 EJB 外使用容器管理的事務(wù)進行工廠化。
- 更進一步使用注解。
- 與平臺中的其他規(guī)范對齊和集成。
Contexts and Dependency Injection 1.1(JSR-346)
- 攔截器的全局排序和管理內(nèi)建上下文的裝飾器 API。
- 可在 Java EE 容器外啟動的嵌入式模式。
- 聲明式地控制歸檔中的哪些包和 Bean 將被掃描。
- 注入日志之類的靜態(tài)成員。
- 將 Servlet 事件作為 CDI 事件發(fā)送。
Bean Validation 1.1(JSR-349)
- 與其他 Java EE 規(guī)范集成。
- JAX-RS:在 HTTP 調(diào)用中驗證參數(shù)和返回值。
- JAXB:將約束條件轉(zhuǎn)換到 XML 模式描述符中。
- 方法級別的驗證。
- 在組集合上應(yīng)用約束條件。
- 擴展模型以支持“與”和“或”風(fēng)格的組合。
JCache: Java Temporary Caching API(JSR-107)
- 在內(nèi)存中暫存 Java 對象的 API 和語義,包括對象的創(chuàng)建、共享訪問、緩存池、失效,以及跨 JVM 的一致性。
Java State Management(JSR-350)
- 應(yīng)用程序和 Java EE 容器可使用該 API 將狀態(tài)管理的任務(wù)交給具有不同 QoS 特征的第三方提供者。
- 基于 Java SE 的調(diào)用者可通過查詢狀態(tài)提供者來訪問狀態(tài)數(shù)據(jù)。
- 可添加具有不同 QoS 的提供者,API 調(diào)用者能夠按自己的規(guī)則進行查詢。
Batch Applications for the Java Platform(JSR-352)
- 用于批處理應(yīng)用程序的編程模型,以及用于調(diào)度和執(zhí)行工作的運行時。
- 為標(biāo)準(zhǔn)編程模型定義批處理工作、批處理工作步驟、批處理應(yīng)用程序、批處理執(zhí)行器和批處理工作管理器。
Concurrency Utilities for Java EE(JSR-236)
- 提供一個整潔、簡單且獨立的 API,使其能用于任何 Java EE 容器中。
Java API for JSON Processing(JSR-353)