javaeesdk分析.docx
- 文档编号:30625704
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:43
- 大小:705.53KB
javaeesdk分析.docx
《javaeesdk分析.docx》由会员分享,可在线阅读,更多相关《javaeesdk分析.docx(43页珍藏版)》请在冰豆网上搜索。
javaeesdk分析
硕士研究生数据可视化作业报告
JavaEEsdk分析
作者姓名
作者学号
指导教师
学科专业
所在学院
提交日期
技术和框架分析
1.新特性
图1JavaEE7新特性
JavaEE7扩展了JavaEE6,利用更加透明的JCP和社区参与来引入新的功能,如图1所示,主要包括加强对HTML5动态可伸缩应用程序的支持、提高开发人员的生产力和满足苛刻的企业需求。
1、提高开发人员的生产力
通过一个紧密集成的平台简化了应用架构,减少样板代码和加强对注释的使用来提高效率,另外借助标准RESTfulWeb服务对客户端的支持提高了应用程序的可移植性。
2、加强对HTML5动态可伸缩应用程序的支持
基于其可扩展的基础架构,JavaEE7推动了对HTML5应用的构建和支持。
在新的平台中,借助具有行业标准的JSON简化了数据分析和交换,并通过低延迟和双向通信的WebSockets减少了响应时间。
以及利用改进的JAX-RS2.0更好地支持异步的、可扩展的、高性能的RESTful服务,从而更好地支持多用户的并发操作。
3、满足苛刻的企业需求
为更好地满足企业的需求,JavaEE7提供了许多新功能:
(1)细化批处理作业,形成可管理的区块,以实现不间断的OLTP性能;
(2)简化多线程并发任务的定义,以提高可扩展性;
(3)以及提供具有选择性和灵活性的事务应用程序等。
JavaEE7开发的开放性,使得Java社区、供应商、组织和个人都能参与其中。
19个来自世界各地的用户组,包括来自北美、南美、欧洲和亚洲,都参与了“采用JSR”计划,提供了宝贵的反馈意见和代码示例以验证Java规范(JSR)的API。
在最新发布的JavaEE平台中都大大简化了访问集装箱服务的API,同时大大拓宽了服务范围。
JavaEE7继续秉承了简化性和高效性的趋势,并进一步拓宽了平台范围。
下面就针对JavaEE7的三大新特性进行详细的剖析。
1.1提高开发人员的生产力
从JavaEE5开始,重心就一直放在提高开发人员的生产力上。
这对于Java开发者来说非常重要,因为这使得使用JavaEE进行开发更加便捷,更重要的是能够满足快速管理和生产的需求。
鉴于此,JavaEE7大大提高了开发人员的生产力。
首先,减少了编写大量核心业务逻辑所需要的样板代码。
其次,该平台引入更多的注释POJOS来降低XML配置的复杂性。
最后,JavaEE7使用更紧密集成的技术,提供一个更加无缝的开发体验。
1.1.1减少冗余代码
JavaEE7一直在致力于减少在核心业务逻辑代码运行前必须执行的样板代码。
减少样板代码的三大核心区域是默认资源、JMS2.0和JAX-RS客户端API。
默认资源是一个新的功能,要求平台提供商预配置一个默认的数据源和一个默认的JMS连接工厂。
这可以让开发人员直接使用默认的资源而无需进行额外的定义。
JMS2.0在可伸缩性和可移植性上经历了重大的改进,减少了冗余代码,已运用在无数的产品部署上,事实证明它是一个良好的规范,能够较好地满足企业的需求。
1.1.2更多带注释的POJO
通过注释JavaEE使开发人员更专注于Java对象的编程而无需关注繁琐的配置。
CDI现在默认情况下已不需要使用beans.xml文件就可以直接使用。
开发人员可以不需要任何配置而是简单的使用@Inject来注入任何Java对象。
包括新的资源注释@JMSDestinationDefinition和@MailSessionDefinition,使得开发人员在源代码中就可以指定元数据资源,简化了DevOps体验。
1.1.3更紧密集成的平台
JavaEE6引入了ManagedBeans1.0作为第一步来朝着EJBs、JSFManagedBeans和CDIbeans发展。
JavaEE7继承了这一点,例如,对JSFManagedBeans进行了改进来更好支持CDIBeans。
JavaEE7为平台引入了易用的EJB容器管理事物,使用基于CDI拦截器的解决方案来保证事务可用在CDImanagedbeans和其它JavaEE组件中,把注释@Transactional应用到任何CDIbean或者任何支持事务的方法中。
BeanValidation在JavaEE7中使用广泛,现在可以用于方法级别的验证,包括内置和自定义的约束。
约束可被应用于方法的参数以及返回值。
约束也可以使用灵活渲染和违反约束的字符串格式的JavaEE的表达语言。
BeanValidation也延伸到JAX-RS2.0。
注释约束可以应用到公共构造函数的参数、方法参数、字段和bean的属性。
此外,他们还可以修饰资源类、实体参数和资源的方法。
例如,约束可以通过@POST和@PUT应用于JAX-RS方法参数来验证表单提交的数据。
1.1.4通过精简现有技术来简化JavaEE
JavaEE7中新增加了许多新的特性,有些老的特性和功能已经被更简单的特性所替代或直接弃用。
JavaEE6为过时技术的弃用和功能的修剪引入了一个正式的流程,以下的API在JavaEE7中已成可选,但在JavaEE8中将会被移除:
JavaEEManagement(JSR-77),原本是用于为应用服务器创建监控管理的API,可各大供应商对此API热情并不高涨;
JavaEEApplicationDeployment(JSR-88),JSR88是当初用于J2EE应用程序在应用服务器上进行配置和部署的标准API。
可是该API始终没有得到众供应商的支持;
JAX-RPC,是早期通过RPC调用和SOAPwebservices进行交互的编程模型。
由于Webservices成熟后从RPC模型中分离出来,被更加健壮和具备更多特性的JAX-WSAPI所替代;
EJB2.xEntityBeansCMP,复杂、笨重、过度复杂的EJB2.*的EntityBean模型已经被JavaEE5的基于POJO的流行轻量级JPA持久层模型所代替。
1.2对HTML5动态可伸缩应用程序的支持
HTML5是包括HTML、JavaScript和CSS3在内的一套技术组合,它加快了开发人员创建高度互动的应用程序的步伐。
开发出的应用程序都是以高度互动的方式提供实时的数据,如聊天应用程序,比赛实况报导等,并且这些应用程序只需要编写一次,就可以应用在桌面、移动客户端等不同设备上,具有非常好的跨平台性。
这些高度动态的应用程序,使得用户可以在任何地点任何时间进行访问,从而对服务器端向客户端传送数据的规模提出了更高的要求。
JavaEE7在更新现有技术如JAX-RS2.0、JavaServerFaces2.2和Servlet3.1NIO基础上,又借助新的应用技术WebSockets和JSON处理为支持动态应用程序HTML5奠定了坚实的基础。
1.2.1低延迟数据交换:
JavaAPIforWebSocket1.0
越来越多的web应用程序依赖于从中央服务器及时获取并更新数据。
基于HTTP的WebSockets为解决低延迟和双向通信提供了一种解决方案。
在WebSocketAPI的最基层是一个带注释的Java对象(POJO),如下列代码所示:
带注释的Java对象(POJO)
@ServerEndpoint("/test")
publicclassTestEndpoint{
@OnOpen
publicvoidonOpen(...){}
@OnClose
publicvoidonClose(...){}
@OnError
publicvoidonError(...){}
@OnMessage
publicvoidtestMessage(Stringmessage,...){}
}
通过注释@ServerEndpoint来指定一个URI。
诸如客户端连接、接收消息和客户端断开这样的回调函数都可以用注释来指定。
WebSocketAPI的最基层支持发送和接收简单文本和二进制信息。
API的简单性也使得开发人员可以快速入门。
当然,功能丰富的应用拥有更复杂的需求,因此需要支持对最基础的网络协议进行控制和自定义,而WebSocketAPI正好能够满足以上需求。
另外,WebSocket利用现有Web容器的安全特性,开发人员只需付出较少的代价就可以建立良好的保密通信。
1.2.2简化应用数据分析和处理:
JavaAPIforJSONProcessing1.0
JSON作为一个轻量级的数据交换格式被应用在许多流行的Web服务中用来调用和返回数据。
许多流行的在线服务都是使用基于JSON的RESTful服务。
在JavaEE7之前,Java应用程序使用了不同的类库去生成和解析RESTful服务中的JSON对象。
然而,现在这个功能已被标准化。
通过JavaAPI中的JSONProcessing1.0,JSON处理过程标准化为一个单一的API,应用程序不需要使用第三方的类库。
这样使得应用程序更小更简便。
同时API包括了支持任何转换器和生成器实现的插件,使得开发人员可以选择最好的实现方式去完成工作。
1.2.3可扩展的RESTful服务:
JAX-RS2.0
JAX-RS2.0增加了异步响应处理,这对于支持对数据有着高要求的HTML5客户端的扩展是至关重要的。
异步处理是一种更好更有效利用线程处理的技术。
在服务器端,处理请求的线程在等待外部任务去完成时应该避免阻塞,从而保证在这一时间段内到达的其他请求能够得到响应。
同样的,在客户端,一个发出请求的线程在等待响应的时候也会发生阻塞,这影响了应用程序的性能。
新的JAX-RS2.0异步客户端API使得客户端调用RESTful可以和其他客户端活动并行执行。
异步的好处是使得一个客户端可以同时调用多个后台服务,对于一个使用者来说减少了总体的延迟时间。
同时为了增强RESTful服务,JAX-RS2.0开发人员可以使用过滤器和实体拦截器。
这样开发人员就可以使用标准的API来实现过滤和拦截功能,使开发过程变得更加便捷和高效。
1.2.4增强开发的易用性:
JSF2.2
JavaServerFaces(JSF)是一种用于构建Web应用程序的Java新标准框架。
它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化了开发。
在这个版本中,JSF增加了对HTML5的支持。
JSF2.2增加了一个叫“pass-throughelements”的新功能。
并为现有的元素增加了一系列的新属性,如输入元素“tel”、“range”和“date”等。
不幸的是,现有的JSF组件不能识别这些新的属性,因此JSF应用程序会忽略这些属性不能进行使用,直到创建专有的解决方案。
对于“pass-throughelements”,JSF渲染器将会忽略这些元素,只是把它们传给支持HTML5的浏览器,这使得可以利用现有的JSF组件来利用HTML5的特性来正常渲染。
JSF引入了一个新的pass-through命名空间http:
//xmlns.jcp.org/jsf/passthrough映射到“p:
”,任何组件的name/value对都可以以“p:
”开始,然后传给浏览器。
如下列代码所示,HTML5“type=color”不需要JSF组件的任何解析就可以传递给浏览器。
inputTextValue=”#{bean.color}”P: type=”color”/> HTML5的动态性使得服务器端处理信息更新的请求不断增多。 在JavaEE6,Servlet异步I/O通过移除“一个请求需要一个线程”的限制,使一个线程可以处理多个并发请求。 这可以使HTML5客户端快速得到响应。 但是,如果服务器端读取数据的速度比客户端发送的速度要快,那么可能会由于缓慢的客户端连接而不能提供更多的数据导致线程阻塞,这样就限制了扩展性。 在JavaEE7中使用新的事件驱动APIServlet3.1从客户端读取数据将不会造成阻塞。 如果有数据可用时,Servlet线程将会读取和处理这些数据,否则就去处理其他请求。 1.3满足苛刻的企业需求 JavaEE十几年来一直努力满足企业的需求,使用Java连接器连接到企业服务端、使用Java事务支持事务处理、使用Java消息服务让系统间可以进行相互通信。 现在企业希望利用开发人员的Java技能编写基于标准的API并能够跨平台运行的批处理应用程序。 企业也需构建高度可扩展的应用来满足更高的服务要求并提高现有资产的利用率。 ConcurrencyUtilities使得JavaEE开发人员编写可扩展的应用程序成为可能。 绝大部分的JavaEE应用都是在线用户驱动的系统,但同时有一些需要进行批处理的服务器端应用程序,尤其是离线分析和ETL等。 这些面向批处理的应用程序是非交互式的、需要长时间运行,这些任务通常需要大量计算,同时可以按顺序或者并行执行,并可以通过特定的事件启动或者定时调度。 批处理较适合选择闲置的时间进行处理,这样可以有效利用计算机资源。 以前,对于批处理程序没有标准的Java编程模型。 现在,批处理应用程序为Java平台提供了如图2非常容易理解的模型。 批处理过程包括任务、步骤、存储库、读取-处理-写入模式和工作流等。 如图2所示,一个任务job代表一系列执行离散业务流程但又密切相关的步骤。 步骤可以按顺序或者并行执行。 同时,在同一个工作流,当前步骤是可选的,基于前一步骤的运行结果决定当前步骤将被执行或者跳过。 另外,步骤可以根据实际的需要被重新执行。 存储库(repository)存储了当前任务的信息,比如任务的最后执行时间。 通过操作员(operator)可以对任务进行排序、开始、停止、暂停和取消操作。 图2用步骤描述工作 2.框架 2.1分布式多层应用程序 JavaEE平台使用,为企业的分布式多层应用模型和应用程序。 应用逻辑被分成部件根据功能,和该应用程序组件,使JavaEE应用程序被安装在根据层的多层JavaEE的环境中各种机械该应用程序组件所属。 JavaEE应用程序部分呈现的组件的运行情况: (1)客户端层组件的客户端机器上运行; (2)在JavaEE服务器上运行的Web层组件; (3)业务层组件的JavaEE服务器上运行; (4)企业信息系统(EIS)层软件的EIS服务器上运行。 图3JavaEE应用程序的组件运行情况图 2.2Web层 JavaEEWeb组件使用JavaServer创建或者servlet或网页Faces技术、JSP技术)。 Servlet是Java编程语言类动态处理请求并构建响应。 JSP页面是基于文本的文档为servlet执行,但允许更自然的方法来创建静态内容。 JavaServerFaces技术建立在servlet和JSP技术,并提供了用于网络应用程序用户界面组件的框架。 静态的HTML页面和小应用程序捆绑在一起的应用程序中的Web组件装配,但不被视为Web组件由JavaEE规范。 服务器端实用工具类也可以绑定Web组件,像HTML页面,不被视为Web组件。 Web层,就像客户层,可能包括一个JavaBeans组件来管理用户输入和发送输入到企业Bean运行在业务层进行处理。 图4Web层的运行情况 源码分析 1.Servlet3.1 1.1AnnotationsServlet 包括了三个类,拦截器类TestFilter,监听器类TestServletContextListener和servlet类TestServlet。 Servlet3.0的部署描述文件web.xml的顶层标签 如果设置为true,则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过web-fragment.xml的扫描,亦即禁用可插性支持);如果不配置该属性,或者将其设置为false,则表示启用注解支持(和可插性支持)。 @WebServlet @WebServlet用于将一个类声明为Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。 根据SDK中samples中的例子,可以对上述注解标记进行简单的了解: @WebServlet(name="TestServlet",urlPatterns={"/"}, initParams={@WebInitParam(name="message",value="myservlet")}) publicclassTestServletextendsHttpServlet{ ……} 如此配置之后,就可以不必在web.xml中配置相应的 它的等价的web.xml配置形式如下: @WebInitParam 该注解通常不单独使用,而是配合@WebServlet或者@WebFilter使用。 它的作用是为Servlet或者过滤器指定初始化参数,这等价于web.xml中 @WebInitParam具有下表给出的一些常用属性: @WebFilter @WebFilter用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。 该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是value、urlPatterns、servletNames三者必需至少包含一个,且value和urlPatterns不能共存,如果同时指定,通常忽略value的取值): 根据SDK中samples中的例子,可以对上述注解标记进行简单的了解: @WebFilter(filterName="TestFilter",urlPatterns={"/"}, initParams={@WebInitParam(name="mesg",value="myfilter")}) publicclassTestFilterimplementsFilter{ ……} 如此配置之后,就可以不必在web.xml中配置相应的 它等价的web.xml中的配置形式为: @WebListener 该注解用于将类声明为监听器,被@WebListener标注的类必须实现以下至少一个接口: ServletContextListener ServletContextAttributeListener ServletRequestListener ServletRequestAttributeListener HttpSessionListener HttpSessionAttributeListener 根据SDK中samples中的例子,可以对上述注解标记进行简单的了解: @WebListener() publicclassTestServletContextListenerimplementsServletContextListener{ ……} 结果如图: 1.2AbsoluteOrderingofWebFragments 在该SDK的samples中,这个sample主要描述的是servlet的可插入特性,其中包括了三个webfragmentjars,并且每一个jar中含有一个过滤器类。 他们实现filter的方式基本相同,主要区别在于webfragment1.jar使用的纯注解方式,webfragment2.jar使用的是web-fragment.xml的方式,webfragment3.jar使用的是注解和web-fragment.xml相结合的方式。 在absolute-ordering-web-fragments-war中,通过pom.xml文件将三个jar文件包含到path中,并且在servlet类TestServlet中通过request将三个jar文件同filter中的参数获取拼接,最后写到页面中。 Pom.xml文件包含三个jar文件的代码段如下: Servlet3.0引入了称之为“Web模块部署描述符片段”的w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaeesdk 分析