days to_days_Java2Days 2012:Java EE
days to_days
Java2Days會議是東歐的主要活動,目的是介紹Java開發(fā)的最新趨勢。 今年,該活動于10月25日至26日在保加利亞的索非亞舉行。 我在那里,并有機會與一些來自SAP的同事一起品嘗了一些最新的Java,云和移動內(nèi)容,這些內(nèi)容已直接發(fā)送到我的家鄉(xiāng)城市。
我已經(jīng)連續(xù)第二年訪問此活動。 今年,它更大了,其中包括“免費技術(shù)培訓(xùn)”等新內(nèi)容。 還有一場競賽(開放至11月11日),其中涉及一些很酷的編程問題。
在這篇博客文章中,我想分享一些我參加的會議的簡短摘要,這些筆記是基于我的筆記以及后來我做的一些其他研究得出的。
- JavaEE.Next(): Reza Rahman 撰寫的Java EE 7、8和Beyond
- 使用GlassFish,Grizzly和JSR 356構(gòu)建HTML5 / WebSocket應(yīng)用程序 ,作者Reza Rahman
- Reza Rahman撰寫的Java EE 6域驅(qū)動設(shè)計
JavaEE.Next():Java EE 7、8及更高版本
在會議開幕式上,Oracle的Java EE / GlassFish傳播者Reza Rahman介紹了即將于明年三月/四月發(fā)布的即將發(fā)布的第七版Java EE的主要變化,以及對Java的一瞥。 EE8。我們了解到對Java EE 8的支持已推遲到Java EE 8,并且對各種更改進行了概述,例如對JMS,WebSocket和HTML 5支持的全面檢查,用于JSON處理的標準API,下一版JAX-RS,緩存API等。
JMS 2.0
新版本的Java消息服務(wù)(JMS)當前正在作為JSR 343開發(fā),它對將近5年前發(fā)布的現(xiàn)有JMS 1.1進行了一些重大改進。 它引入了新的消息傳遞功能,例如批處理傳遞和傳遞延遲,以及對JMS API的一些更改,以使其更易于使用,例如新的批注和依賴項注入。 使用新的API,發(fā)送消息實際上涉及注入上下文,查找隊列,最后是單個方法調(diào)用,并動態(tài)創(chuàng)建所有需要的對象:
@Inject private JMSContext context;@Resource(mappedName = "jms/inboundQueue") private Queue inboundQueue;public void sendMessage(String payload) {context.createProducer().send(inboundQueue, payload); }另請參見JMS 2.0早期草案 。
WebSocket的Java API
用于WebSocket的Java API( JSR 356 )是Java EE 7首次引入的新規(guī)范。它具有針對WebSocket的服務(wù)器端API和客戶端API,具有兩種編程風格和聲明性風格。 有關(guān)更多信息,請參見下面有關(guān)此主題的專門會議的摘要。
JSON處理的Java API
JSON處理的Java API( JSR 353 )也是一個新規(guī)范,它具有解析,生成,轉(zhuǎn)換和查詢JSON內(nèi)容的功能。 它同時具有對象模型和流API,類似于XML世界中的DOM和StAX。 將來,類似于JAXB ,還將有將JSON綁定到Java對象的方法,但是目前,這仍然不屬于此JSR的范圍。 另請參閱JSON-P:JSON處理的Java API 。
JAX-RS 2.0
下一版的RESTful Web服務(wù)Java API(JAX-RS)的主要新增功能是標準的客戶端API,以及新功能,例如消息過濾器和處理程序,實體攔截器,異步處理,超媒體支持和通用配置。 另請參見JAX-RS 2.0早期草案解釋 。
Java緩存API
Java緩存API( JSR 107 )已經(jīng)失去了近10年的歷史,并且最終將成為Java EE的一部分。 它引入了標準API和注釋,用于從緩存中存儲和檢索對象。 該API非常簡單,例如,將客戶對象放入緩存中將涉及類似于以下內(nèi)容的代碼:
public class CustomerDao {@CachePut(cacheName = "customers")public void addCustomer(@CacheKeyParam int cid, @CacheValue Customer customer) {...} }
其他Java EE 7功能
- JPA 2.1添加了內(nèi)置模式生成,包括索引,對存儲過程的支持以及其他增強功能。
- JTA 1.2引入了對EJB外部聲明式事務(wù)的支持以及@ TransactionScoped注釋。
- JSF 2.2引入了更好HTML5支持,包括JSF頁面中HTML5孤島以及將HTML5輸入類型綁定到JSF Bean,以及其他注釋,例如@FlowScoped和@ViewScoped ,CDI對齊等。
- Java EE的批處理是一個新規(guī)范,它引入了一個基于作業(yè)的批處理API,該作業(yè)包括多個步驟,每個步驟都涉及讀取,處理和寫入項目。 除了實現(xiàn)接口之外,可以將讀取,處理和寫入項目的方法簡單地標注為@ReadItem , @ProcessItem和@WriteItem
- Bean Validation 1.1引入了方法約束和可注入工件。
Java EE 8
預(yù)計JavaEE的第8版將于Java EE 7于2015年發(fā)布2年。它將重點關(guān)注以下領(lǐng)域:
- 云,PaaS,多租戶
- 基于拼圖的模塊化
- 更好HTML5支持
- 更多CDI和EJB對齊
- NoSQL(?)
摘要
在45分鐘內(nèi)確實吞沒了很多信息,但發(fā)言人在傳達這些信息方面做得很好。 看來Java EE 7將是該系列的堅實補充,而Java EE 8將具有更多主要功能。
本次會議的幻燈片可在此處獲得 。 您可以通過下載GlassFish 4試用這些新功能。 要保持最新狀態(tài),您可以關(guān)注The Aquarium博客。
使用GlassFish,Grizzly和JSR 356構(gòu)建HTML5 / WebSocket應(yīng)用程序
實際上,這是最后一次會議,Reza Rahman在會議上介紹了即將到來的Java EE 7的一個非常有趣的部分,即對WebSocket的支持。
WebSocket入門
通過半雙工HTTP協(xié)議進行雙向通信一直是一個挑戰(zhàn)。 已經(jīng)引入了服務(wù)器推送的功能,例如輪詢,長輪詢或AJAX,但它們復(fù)雜,效率低下且浪費。
相比之下, WebSocket通過單個TCP套接字提供雙向全雙工通信通道。 但是,與純TCP不同,所有通信都是通過標準HTTP端口(例如80)完成的,這使其可以在使用防火墻阻止非標準Internet連接的環(huán)境中工作。 它最初是作為HTML 5的一部分提出的。
W3C定義了一個非常簡單的WebSocket JavaScript API和一個WebSocket協(xié)議 。 該協(xié)議定義了“握手”和“框架”,其中握手定義了如何將普通的HTTP連接升級為WebSocket連接,而框架則定義了消息的有線格式。 API定義了用于打開和關(guān)閉連接以及以各種方式發(fā)送消息的方法。 當前所有主要瀏覽器都支持它。
WebSocket的Java API
Java EE 7通過用于WebSocket的Java API( JSR 356 )引入了WebSocket支持。 該參考實現(xiàn)稱為Tyrus,它是GlassFish 4的一部分。該規(guī)范定義了兩種不同的API風格–針對客戶端和服務(wù)器的基于接口的編程和基于注釋的聲明。
聲明性API過于簡單,對開發(fā)人員完全隱藏了WebSocket內(nèi)部。 以最簡單的形式,可以如下定義WebSocket端點:
@WebSocketEndpoint("/hello") public class HelloBean {@WebSocketMessagepublic String sayHello(String name) {return "Hello " + name;} }有以下注釋:
- @WebSocketEndpoint是一個類級別的批注,它聲明一個POJO來接受WebSocket消息。 在此批注中指定了接受消息的路徑。 可選地,它也可以指定解碼器,編碼器和子協(xié)議。
- @WebSocketMessage是方法級別的注釋,用于端點接收消息時調(diào)用的方法。 從此方法返回的值將發(fā)送回另一端。
- @WebSocketOpen和@WebSocketClose是用于攔截連接打開和關(guān)閉事件的方法級注釋。
- @WebSocketError是用于在對話過程中攔截錯誤的方法級注釋。
- @WebSocketParam是作為參數(shù)傳遞的路徑段的參數(shù)級注釋。
摘要
WebSocket似乎確實是當前使用的服務(wù)器推送方法的更好替代方案,因此很高興JavaEE即將推出對此的支持。
本次會議的幻燈片可在此處獲得 。 Slideshare也提供了類似的演示文稿, 用Java構(gòu)建HTML5 WebSocket應(yīng)用程序 。
Java EE 6的域驅(qū)動設(shè)計
Reza Rahman舉行的第三次Java EE會議著重于域驅(qū)動設(shè)計(DDD) 。 這是一種通過將實現(xiàn)與不斷發(fā)展的模型相連接來開發(fā)軟件的方法。 它的前提是將項目的主要精力放在核心領(lǐng)域和領(lǐng)域邏輯上,并基于領(lǐng)域模型進行設(shè)計。 這個詞最早是由埃里克·埃文斯(Eric Evans)在他的同名書中創(chuàng)造的。 DDD強調(diào)返回面向?qū)ο蟮姆治龊驮O(shè)計,并逐漸取代J2EE Blue Prints最初流行的傳統(tǒng)體系結(jié)構(gòu)而逐漸流行。 會議的目的是通過將Java EE 6的核心概念映射到Java EE規(guī)范,并提供一個全面的代碼示例,來演示如何使用Java EE 6實現(xiàn)DDD。
核心概念
- 領(lǐng)域 :知識領(lǐng)域(本體論),影響或活動。
- 模型 :描述領(lǐng)域選擇方面的抽象系統(tǒng),可用于解決與該領(lǐng)域相關(guān)的問題。
- 無處不在的語言 :一種圍繞領(lǐng)域模型構(gòu)造的語言,所有團隊成員都在使用。
- 上下文 :單詞或陳述出現(xiàn)的設(shè)置,用于確定其含義。
建筑模塊
下圖是域驅(qū)動設(shè)計的“規(guī)范圖像”。
- 實體 :不是由其屬性定義的對象,而是由連續(xù)性線程及其標識定義的對象。
- 值對象 :包含屬性但沒有概念標識的對象。
- 聚合 :由根實體(也稱為聚合根)綁定在一起的對象的集合。
- 服務(wù) :當操作在概念上不屬于任何對象時。
- 存儲庫 :用于檢索域?qū)ο蟮姆椒☉?yīng)委托給專門的存儲庫對象。
- Factory :用于創(chuàng)建域?qū)ο蟮姆椒☉?yīng)委托給專門的Factory對象。
維護模型完整性(策略性DDD)
層數(shù)
用戶界面:顯示用戶信息并接收輸入。
- 應(yīng)用程序 :薄層以協(xié)調(diào)應(yīng)用程序活動。 此層中沒有業(yè)務(wù)邏輯或業(yè)務(wù)對象狀態(tài)。
- 域 :所有業(yè)務(wù)對象及其狀態(tài)都位于此處。 域?qū)又械膶ο髴?yīng)該不關(guān)心顯示或持久保存自身。
- 基礎(chǔ)結(jié)構(gòu) :處理諸如持久性之類的內(nèi)務(wù)處理任務(wù)的對象。
將DDD映射到Java EE
| 語境 | 包裝,模塊化 |
| UI層 | JSF,Servlet |
| 服務(wù),應(yīng)用層 | EJB,CDI |
| 實體,價值對象,存儲庫 | JPA(實體),CDI |
| 基礎(chǔ)設(shè)施層 | JPA(實體管理器API),JMS |
樣品申請
在此期間進行演示的示例應(yīng)用程序是SourceForge已提供的DDD示例的改進 。 這是一個運輸跟蹤器應(yīng)用程序。 該應(yīng)用程序的包裝結(jié)構(gòu)清楚地揭示了上述不同的層。 經(jīng)過翻新的DDD示例應(yīng)用程序?qū)⒆鳛閖ava.net項目很快發(fā)布。 在此之前,您可以下載并使用現(xiàn)有的DDD示例,該示例是使用Maven構(gòu)建的,可以在嵌入式Jetty中運行,當然也可以導(dǎo)入Eclipse以進行更深入的了解。
摘要
我發(fā)現(xiàn)DDD非常有趣,盡管起初有點難以理解。 Reza詳細解釋了所有內(nèi)容,但是這縮短了演示和顯示示例應(yīng)用程序代碼的時間。 我和我的同事對示例中的業(yè)務(wù)邏輯是在Domain層類本身中捕獲的,而沒有任何幕墻控制器的事實感到很感興趣。 最初,這對我來說似乎是一種不尋常的方法,但盡管如此,其次卻是很合理的。
本次會議的幻燈片可在此處獲得。 會議后研究DDD時,我發(fā)現(xiàn)了以下有趣的資源:
- 快速域驅(qū)動設(shè)計 ,一個簡短,易讀的摘要以及DDD基礎(chǔ)知識簡介。
- JavaWorld(2009)中的文章, 使用Java EE 6進行域驅(qū)動的設(shè)計 。
- 域驅(qū)動設(shè)計社區(qū) 。
參考: Java2Days 2012:來自我們的JCG合作伙伴 Stoyan Rachev的Java EE ,位于Stoyan Rachev的Blog博客上。
翻譯自: https://www.javacodegeeks.com/2012/11/java2days-2012-java-ee.html
days to_days
總結(jié)
以上是生活随笔為你收集整理的days to_days_Java2Days 2012:Java EE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何找回自我 怎样找回自我
- 下一篇: Java Bullshifier –生成