天天看點

《Java EE 7精粹》—— 1.3 Java EE 7有什麼新功能

本節書摘來異步社群《java ee 7精粹》一書中的第1章,第1.3節,作者:【美】arun gupta,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

為改善平台的功能性和豐富性,增加了一些新的規範。為使平台更簡單、更易用,修訂了幾個現有的元件規範。

新規範的主要功能描述如下。

通過聲明方式注解一個pojo或者通過程式設計方式實作接口來定義一個websocket的用戶端和伺服器端點。

提供伺服器特定的配置,比如在容器的uri空間中、端點支援的子協定中,以及應用程式所需的擴充中辨別websocket端點的映射。

提供用戶端特定的配置,比如提供自定義配置的算法。

啟用在jdk或web容器上打包和部署。

允許與現有的java ee技術內建。

流式api用于提供以流的方式解析和生成json。

對象模型api用于建立随機通路和樹狀結構來表述記憶體中的json資料。

使用xml模式的作業規範語言(job specification language)來描述批處理作業,定義了完整的作業執行順序。

使用接口、抽象類和字段注釋來定義批處理程式設計模型的功能。

提供了chunked和batchlet兩種作業處理方式。

提供了java ee應用程式元件的并發能力,而不影響容器的完整性。

定義了托管對象:managedexecutorservice、managedscheduledexecutorservice、contextservice和managedthreadfactory。

更新後,規範的主要功能描述如下。

提供了一個新的用戶端api,用于通路網絡資源和提供與jax-rs的providers整合。

支援在用戶端api和伺服器api之間的異步處理。

定義了消息過濾器和實體攔截器作為定制用戶端和伺服器兩端的請求/響應處理的擴充點。

引入qs因子作為伺服器端新的内容協商。

字段、屬性和使用@headerparam、@queryparam等注解注入的參數可以使用聲明式驗證。資源類可以使用限制注解。

為使jms api更簡單和易用,做出了多處修改。例如,connection、session和其他對象的close方法現在實作了java.lang.autocloseable接口,可以在java se 7的try-with-resources語句中使用。增加了無需提供備援參數建立會話的新方法。增加了getbody的新方法,允許應用程式直接從message擷取消息體,而無需首先将其轉換為适當的子類型。

消息生産者現在可以指定一個在指定的時間間隔之後才被傳送的消息。

增加了允許應用程式異步發送消息的發送方法。

jms提供者現在必須設定jmsxdeliverycount消息屬性。

表達式語言(el)是一個獨立的規範,它可以使用elprocessor在java ee容器之外配置和使用。

表達式語言包含了lambda文法。現在,使用lambda表達式可以支援一套完整的集合操作,如map和過濾器。

除了通常的算術和比較操作符,還加入了新的操作(比如指派運算符和字元串連接配接運算符),使表達式語言更具表現力。

對ejb 2.1、ejb ql和基于jax-rpc的web服務端點和用戶端視圖的支援現在是可選的。

使用沒有方法的消息監聽器接口,增強了消息驅動bean(mdb)的限制。mdb暴露所有公共方法作為消息監聽器方法,這将允許為将來的更多的mdb自定義資源擴充卡。

使用清晰的規則為ejb精簡版容器定義了ejb api組來支援其他的api組,有助于定義如何将超越ejb精簡版的ejb功能正式地加入到不支援完整功能的java ee profile的産品中。

ejb精簡版包含了異步會話bean調用和非持久性的ejb定時器服務。

增加了一個選項來禁用有狀态會話bean的鈍化。

定義了使用httpupgradehandler更新現有的http連接配接到不同的協定的标準機制。

為異步servlet提供了非阻塞請求和響應處理。

定義了http方法被覆寫的規則。

faces flow封裝了與應用程式定義的入口點和出口點相關的視圖、頁面。

資源庫限制使開發人員能夠以可重用的和可互換的方式,将facelet模闆應用到整個應用程式。

html5友好的标記允許幾乎完全控制視圖中每個元素的使用者體驗。

無狀态視圖意味着開發人員不再需要儲存uicomponentstate,這允許應用程式使用javascript元件來代替jsf管理狀态。

可以通過使用javax.persistence.schema-generation.*屬性來建立資料庫和表。

非同步的持久化上下文意味着一個持久化上下文無需登記在一個事務中,這樣的持久化上下文可以顯式地加入事務。

criteria api支援批量更新/删除。

可以使用function調用預定義和使用者定義的函數。

可以使用storedprocedurequery和@namedstoredprocedurequery調用存儲過程。

使用interceptorbinding關聯攔截器是現在這個規範而不是cdi的一部分。

@aroundconstruct指定了一個攔截器方法來接收目标類構造子被調用時的回調。

通過增加構造子級别的攔截器,方法級的攔截器可以擴充到生命周期的回調。

使用攔截器綁定,優先級範圍可以專用于攔截器排序。

在java ee中,為使用作用域注解的bean和ejb自動啟用cdi。

@priority注解支援全局排序和啟用攔截器、裝飾器和alternative。

@vetoed注解簡化了程式設計式的禁用類。

驗證限制可以應用到任意方法和構造子的參數和傳回值。

增加和重新設計了cdi內建點。

當驗證級聯觸發時,可以改變目标組。

應用程式可以使用@transactional,在類級别和方法級别以聲明方式控制cdi管理的bean和java ee規範的托管bean的事務邊界,方法級别的注解會覆寫類級别定義的注解。

@transactionscoped是一個新的cdi作用域,将bean執行個體生命周期的作用域定義為目前的jta事務。

@mailsessiondefinition和@mailsessiondefintions定義了使用jndi注冊的mailsession。

提供@administeredobjectdefinition、@administeredobjectdefintions、@connector factorydefinition和@connectorfactorydefinitions來定義連接配接器管理的對象和将在jndi中注冊的工廠。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。