Java2Days 2012:Java EE

Java2Days會議是東歐的主要活動,目的是介紹Java開發的最新趨勢。 今年,該活動于10月25日至26日在保加利亞的索非亞舉行。 我在那里,并有機會與一些SAP的同事一起品嘗了一些最新的Java,云和移動內容,這些內容已直接發送到我的家鄉城市。

我已經連續第二年訪問此活動。 今年,它更大了,其中包括“免費技術培訓”等新內容。 還有一場競賽(開放至11月11日),其中涉及一些很酷的編程問題。

在這篇博客文章中,我想分享我參加的一些會議的簡短摘要,這些筆記是基于我的筆記以及后來我做的一些其他研究得出的。

  • JavaEE.Next(): Reza Rahman 撰寫的Java EE 7、8和Beyond
  • 使用GlassFish,Grizzly和JSR 356構建HTML5 / WebSocket應用程序 ,作者Reza Rahman
  • Reza Rahman撰寫的Java EE 6域驅動設計


JavaEE.Next():Java EE 7、8及更高版本

在會議開幕式上,Oracle的Java EE / GlassFish傳播者Reza Rahman介紹了即將于明年三月/四月發布的即將發布的Java EE第七版的主要更改,以及對Java的一瞥。 EE8。我們了解到對Java EE 8的支持已推遲到Java EE 8,并且對各種更改進行了概述,例如對JMS,WebSocket和HTML 5支持進行了大修,用于JSON處理的標準API,下一版JAX-RS,緩存API等。

JMS 2.0

新版本的Java消息服務(JMS)當前正在作為JSR 343開發,它對將近5年前發布的現有JMS 1.1進行了一些重大改進。 它引入了新的消息傳遞功能,例如批處理傳遞和傳遞延遲,以及對JMS API的一些更改,以使其更易于使用,例如新的批注和依賴項注入。 使用新的API,發送消息實際上涉及注入上下文,查找隊列,最后是單個方法調用,并動態創建所有需要的對象:

@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首次引入的新規范。它具有用于WebSocket的服務器端API和客戶端API,具有兩種編程風格和聲明性風格。 有關更多信息,請參見下面有關此主題的專門會議的摘要。

JSON處理的Java API

JSON處理的Java API( JSR 353 )也是一個新規范,它具有解析,生成,轉換和查詢JSON內容的功能。 它同時具有對象模型和流API,類似于XML世界中的DOM和StAX。 將來,類似于JAXB ,還將有將JSON綁定到Java對象的方法,但是目前,這仍然不屬于此JSR的范圍。 另請參閱JSON-P:JSON處理的Java API 。

JAX-RS 2.0

下一版本的RESTful Web服務Java API(JAX-RS)的主要新增功能是標準的客戶端API,以及新功能,例如消息過濾器和處理程序,實體攔截器,異步處理,超媒體支持和通用配置。 另請參見JAX-RS 2.0早期草案解釋 。

Java緩存API

Java緩存API( JSR 107 )已經失去了近10年的歷史,并且最終將成為Java EE的一部分。 它引入了標準API和注釋,用于存儲和從緩存中檢索對象。 該API非常簡單,例如,將客戶對象放入緩存中將涉及類似于以下代碼:

public class CustomerDao {@CachePut(cacheName = "customers")public void addCustomer(@CacheKeyParam int cid, @CacheValue Customer customer) {...}
}


其他Java EE 7功能

  • JPA 2.1增加了內置的模式生成,包括索引,對存儲過程的支持以及其他增強功能。
  • JTA 1.2引入了對EJB外部聲明式事務的支持以及@ TransactionScoped注釋。
  • JSF 2.2引入了更好HTML5支持,包括JSF頁面中HTML5孤島以及將HTML5輸入類型綁定到JSF Bean,以及其他注釋,例如@FlowScoped@ViewScoped ,CDI對齊等。
  • Java EE的批處理是一個新規范,它引入了一個API,用于基于作業的批處理,該作業包括步驟,每個步驟都涉及讀取,處理和寫入項目。 除了實現接口之外,可以將讀取,處理和寫入項目的方法簡單地標注為@ReadItem@ProcessItem@WriteItem
  • Bean Validation 1.1引入了方法約束和可注入工件。


Java EE 8

JavaEE的第8版預計將于Java EE 7于2015年發布2年。它將重點關注以下領域:

  • 云,PaaS,多租戶
  • 基于拼圖的模塊化
  • 更好HTML5支持
  • 更多CDI和EJB對齊
  • NoSQL(?)


摘要

在45分鐘內確實吞沒了很多信息,但發言人在傳達這些信息方面做得很好。 看來Java EE 7將是該系列的堅實補充,而Java EE 8將具有更多主要功能。

本次會議的幻燈片可在此處獲得 。 您可以通過下載GlassFish 4試用這些新功能。 要保持最新狀態,您可以關注The Aquarium博客。

使用GlassFish,Grizzly和JSR 356構建HTML5 / WebSocket應用程序

實際上,這是最后一次會議,Reza Rahman在會議上介紹了即將到來的Java EE 7的一個非常有趣的部分,即對WebSocket的支持。

WebSocket入門

通過半雙工HTTP協議進行雙向通信一直是一個挑戰。 已經引入了服務器推送的方式,例如輪詢,長輪詢或AJAX,但它們復雜,效率低下且浪費。

相比之下, WebSocket通過單個TCP套接字提供雙向全雙工通信通道。 但是,與純TCP不同,所有通信都是通過標準HTTP端口(例如80)完成的,這使其可以在使用防火墻阻止非標準Internet連接的環境中工作。 它最初是作為HTML 5的一部分提出的。

W3C定義了一個非常簡單的WebSocket JavaScript API和一個WebSocket協議 。 該協議定義了“握手”和“框架”,其中握手定義了如何將普通的HTTP連接升級為WebSocket連接,而框架則定義了消息的有線格式。 API定義了用于打開和關閉連接以及以各種方式發送消息的方法。 當前所有主要瀏覽器都支持它。

WebSocket的Java API

Java EE 7通過用于WebSocket的Java API( JSR 356 )引入了WebSocket支持。 該參考實現稱為Tyrus,它是GlassFish 4的一部分。該規范定義了兩種不同的API風格–針對客戶端和服務器的基于接口的編程和基于注釋的聲明。

聲明性API過于簡單,對開發人員完全隱藏了WebSocket內部。 以最簡單的形式,可以如下定義WebSocket端點:

@WebSocketEndpoint("/hello")
public class HelloBean {@WebSocketMessagepublic String sayHello(String name) {return "Hello " + name;}
}

有以下注釋:

  • @WebSocketEndpoint是一個類級別的批注,它聲明一個POJO來接受WebSocket消息。 在此批注中指定了接受消息的路徑。 可選地,它也可以指定解碼器,編碼器和子協議。
  • @WebSocketMessage是方法級別的注釋,用于端點接收消息時調用的方法。 從此方法返回的值將發送回另一端。
  • @WebSocketOpen@WebSocketClose是用于攔截連接打開和關閉事件的方法級注釋。
  • @WebSocketError是用于在對話期間攔截錯誤的方法級注釋。
  • @WebSocketParam是作為參數傳遞的路徑段的參數級注釋。


摘要

WebSocket似乎確實是當前使用的服務器推送方法的更好替代方案,因此很高興JavaEE即將推出對此的支持。

本次會議的幻燈片可在此處獲得 。 Slideshare也提供了類似的演示文稿, 用Java構建HTML5 WebSocket應用程序 。

Java EE 6的域驅動設計

Reza Rahman的第三次Java EE研討會重點討論了域驅動設計(DDD) 。 這是一種通過將實現與不斷發展的模型連接來開發軟件的方法。 它的前提是將項目的主要精力放在核心領域和領域邏輯上,并基于領域模型進行設計。 這個詞最早是由埃里克·埃文斯(Eric Evans)在他的同名書中創造的。 DDD強調返回面向對象的分析和設計,并逐漸取代J2EE Blue Prints最初流行的傳統體系結構而逐漸流行。 會議的目的是通過將Java EE 6的核心概念映射到Java EE規范,并提供一個全面的代碼示例,來演示如何使用Java EE 6實現DDD。

核心概念

  • 領域 :知識領域(本體論),影響或活動。
  • 模型 :描述領域選擇方面的抽象系統,可用于解決與該領域相關的問題。
  • 無處不在的語言 :一種圍繞領域模型構造的語言,所有團隊成員都在使用。
  • 上下文 :單詞或陳述出現的設置,用于確定其含義。


建筑模塊

下圖是域驅動設計的“規范圖像”。

  • 實體 :不是由其屬性定義的對象,而是由連續性及其標識來定義的對象。
  • 值對象 :包含屬性但沒有概念標識的對象。
  • 集合 :由根實體(否則稱為集合根)綁定在一起的對象的集合。
  • 服務 :當操作在概念上不屬于任何對象時。
  • 存儲庫 :用于檢索域對象的方法應委托給專門的存儲庫對象。
  • Factory :用于創建域對象的方法應委托給專門的Factory對象。


維護模型完整性(策略性DDD)


層數

用戶界面:顯示用戶信息并接收輸入。

  • 應用程序 :薄層以協調應用程序活動。 此層中沒有業務邏輯或業務對象狀態。
  • :所有業務對象及其狀態都位于此處。 域層中的對象應該不關心顯示或持久保存自身。
  • 基礎結構 :處理諸如持久性之類的內務處理任務的對象。


將DDD映射到Java EE

DDD概念/層 Java EE概念
語境 包裝,模塊化
UI層 JSF,Servlet
服務,應用層 EJB,CDI
實體,值對象,存儲庫 JPA(實體),CDI
基礎設施層 JPA(實體管理器API),JMS


樣品申請

在此期間進行演示的示例應用程序是SourceForge已提供的DDD示例的改進 。 這是一個Shipping Tracker應用程序。 該應用程序的包裝結構清楚地揭示了上述不同的層。 經過翻新的DDD示例應用程序將作為java.net項目盡快發布。 在此之前,您可以下載并使用現有的DDD示例,該示例是使用Maven構建的,可以在嵌入式Jetty中運行,當然也可以導入Eclipse以進行更深入的了解。

摘要

我發現DDD非常有趣,盡管起初有點難以理解。 Reza詳細解釋了所有內容,但是這縮短了演示和顯示示例應用程序代碼的時間。 我和我的同事對示例中的業務邏輯是在Domain層類本身中捕獲的,而沒有任何Facade的控制器感到驚訝。 最初,這對我來說似乎是一種不尋常的方法,但盡管如此,其次它還是很合理的。

本次會議的幻燈片可在此處獲得。 會議后研究DDD時,我發現了以下有趣的資源:

  • 快速域驅動設計 ,一個簡短,易讀的摘要以及DDD基礎知識簡介。
  • JavaWorld(2009)中的文章, 使用Java EE 6進行域驅動的設計 。
  • 域驅動設計社區 。


參考: Java2Days 2012:來自JCG合作伙伴 Stoyan Rachev的Java EE ,位于Stoyan Rachev的Blog博客上。

翻譯自: https://www.javacodegeeks.com/2012/11/java2days-2012-java-ee.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html5布局總結,HTML5網頁布局的總結

可以通過 和 將 html 元素組合起來。html 塊元素大多數 html 元素被定義為塊級元素或內聯元素。編者注:“塊級元素”譯為 block level element,“內聯元素”譯為 inline element。塊級元素在顯示時,通常會以新行來開始(和結束)。例子&#x…

c++ 優先隊列_C/C++數據結構:隊列結構最全解析!帶你零基礎入門隊列結構

前言上一章節針對于C語言棧結構做了解析,不清楚的可以回顧一下。本章節主要針對于C語言的基礎數據結構隊列做以解析。數據結構之隊列隊列是一種特殊的 線性表 ,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在…

bit-map再顯身手:test.txt中有42億個無符號整數, 求不存在于test.txt中的最小無符號整數。限制: 可用內存為600MB....

先看看這個題目:test.txt中有42億個無符號整數, 求不存在于test.txt中的最小無符號整數. 限制: 可用內存為600MB. 又是大數據。 看到42億, 有靈感沒? 要知道, 2的32次方就是42億多一點點啊。42億個無符號…

周期均方根和有效值的區別_黑豬肉和白豬肉有啥區別?

為啥散養黑豬肉的價格要比白豬貴很多?這其中的原因不看不知道!市面上的散養黑豬肉通常要比白豬肉貴很多,但是仍有不少人喜歡買黑豬肉回家吃,散養黑豬肉和白豬肉不僅僅是口感上有所差距,其價值差距體現在很多方面,接下來小編就和大…

BZOJ1734: [Usaco2005 Feb]Aggressive cows 憤怒的牛

【傳送門:BZOJ1734】 簡要題意: 約翰有N 間牛棚,這些牛棚坐落在一條直線上,第i 間牛棚位于坐標Xi 的位置。他要把C 頭 奶牛安排在這些牛棚里。每間牛棚最多可以放一頭奶牛,也可以空著。這些奶牛的脾氣都很暴燥&#xf…

CSS基礎范例

1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>Title</title>6 <style>7 *{8 margin: 0; /*重置*/9 padding: 0…

測試環境搭建流程_前端構建 DevOps 搭建 DevOps 基礎平臺(中)

前言搭建基礎平臺搭建上篇的時候的時候&#xff0c;已經介紹過了項目流程設計、數據庫搭建、jwt 登錄等模塊。此篇我們介紹分支管理設計及其他的基礎模塊。后端模塊DevOps - Gitlab Api使用(已完成&#xff0c;點擊跳轉)DevOps - 搭建 DevOps 基礎平臺(已完成 50%)基礎平臺搭建…

什么是PermGen泄漏?

接下來是對Java應用程序中特定類型的內存問題的實用介紹。 即–我們將分析導致java.lang.OutOfMemoryError&#xff1a;PermGen空間的錯誤 堆棧跟蹤中的癥狀。 首先&#xff0c;我們將介紹理解該主題所需的核心概念&#xff0c;并說明什么是對象&#xff0c;類&#xff0c;類…

html浮動炫酷樣式,jQuery和CSS3炫酷表單浮動標簽特效

這是一款炫酷的jQuery和CSS3表單浮動標簽特效。浮動標簽是指輸入框中的文字或占位文本在輸入框聚焦的時候&#xff0c;以動畫的方式浮動到指定的地方。浮動標簽特效是一種新穎時尚的動畫特效&#xff0c;不僅效果很酷&#xff0c;而且能以明確的方式提示用戶該輸入框應該填寫上…

rto凈化效率計算公式_全面剖析 石油化工行業RTO蓄熱式焚燒爐的優勢要素

在我國的國民經濟發展中&#xff0c;石油化工產業是重要的能源基礎工業&#xff0c;但是廢氣的治理問題一直困擾著許多企業。直到RTO蓄熱式焚燒爐的面世&#xff0c;為石油化工行業的廢氣治理帶來了新希望。如今&#xff0c;有機廢氣治理工作越來越受到廣泛重視&#xff0c;傳統…

python作業:高級FTP程序

要求&#xff1a; 用戶加密認證允許同時多用戶登錄每個用戶有自己的家目錄 &#xff0c;且只能訪問自己的家目錄對用戶進行磁盤配額&#xff0c;每個用戶的可用空間不同允許用戶在ftp server上隨意切換目錄允許用戶查看當前目錄下文件允許上傳和下載文件&#xff0c;保證文件一…

webpack學習筆記 (一)

一、安裝nodejs&#xff1b; 點擊打開nodejs官方站點&#xff1b; 點擊下圖框住的按鈕&#xff0c;下周nodejs安裝包&#xff1b; 安裝下載好的安裝包。 安裝完畢之后&#xff0c;在cmd中輸入node -v查看是否已經安裝成功 如果有版本號顯示&#xff0c;則代表安裝成功&#xf…

將渦輪增壓器添加到JEE Apps

我扮演的關鍵角色之一是在本地社區中傳播Akka。 作為討論的一部分&#xff0c;人們通常會想到的問題/疑問是Akka如何針對編寫良好的Java / JEE應用程序提供更好的可伸縮性和并發性。 由于底層硬件/ JVM保持不變&#xff0c;因此參與者模型如何比傳統的JEE應用程序發揮更多的功…

python package_python之package定義

一.簡單說明 python是通過module組織代碼的&#xff0c;每一個module就是一個python文件&#xff0c;但是modules是通過package來組織的。我們平時在簡單測試的時候 一般就是幾個Python文件存放在同級的目錄下&#xff0c;但是當我們開始嘗試開發更為復雜的項目時&#xff0c;p…

html 手機端無法拖動地圖,關于騰訊地圖api的禁止地圖拖動問題

禁用滾動和拖動*{margin:0px;padding:0px;}body, button, input, select, textarea {font: 12px/16px Verdana, Helvetica, Arial, sans-serif;}p{width:603px;padding-top:3px;overflow:hidden;}.btn{width:142px;}#container{min-width:600px;min-height:767px;}//初始化函數…

《一起》個人進展——Day07

昨天做了些什么:實現登錄界面的美化 今天的計劃:還是準備進行與其他界面的融合 遇到的困難:代碼了解不夠&#xff0c;融合起來會出現bug轉載于:https://www.cnblogs.com/gxt-/p/6828131.html

epoll nio區別_【總結】兩種 NIO 實現:Selector 與 Epoll

我想用這個話題小結下最近這一階段的各種測試和開發。其實文章的內容主要還是想總結一下NIO Socket&#xff0c;以及兩種不同操作系統實現NIO的方式&#xff0c;selector和epoll。問題應該從服務器端開始說起。我們都寫過net包下的socket&#xff0c;用socket的accept方法來等待…

MapReduce的工作原理

一、MapReduce模型框架 MapReduce是一個用于大規模數據處理的分布式計算模型&#xff0c;最初由Google工程師設計并實現的&#xff0c;Google已經將完整的MapReduce論文公開發布了。其中的定義是&#xff0c;MapReduce是一個編程模型&#xff0c;是一個用于處理和生成大規模數據…

react實現多行文本超出加省略號

http://www.css88.com/archives/5206 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; 根據該文章方法&#xff0c;放在react項目中發現并不能實現&#xff0c;仔細觀察發現原來react解析出來的css樣…

Google Guava MultiMaps

番石榴 這是系列文章中的第一篇&#xff0c;我將嘗試解釋和探索Google很棒的Guava java庫 。 我在搜索Apache Commons Collections的通用版本時遇到了番石榴&#xff08;Guava&#xff09;–我需要一個Bimap并且厭倦了必須使用強制類型轉換來填充我的代碼–但是我發現要好得多…