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.mzph.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并且厌倦了必须使用强制类型转换来填充我的代码–但是我发现要好得多…