JAVA企业级应用开发技术综述(江西理工大学信息工程学院,江西赣州341000)摘要:本文简要介绍JavaEE的发展历程,浅析了JavaEE7的一些特性,展望JavaEE8,最后介绍第三方开源JavaEE框架,以此以加深对JavaEE的理解,从而更好的应用它。关键字:JavaEEOverviewofJAVAEnterpriseApplicationandDevelopmentTechnology(FacultyofInformationEngineering,JiangxiUniversityofScienceandTechnology,Ganzhou341000China)Abstract:ThispaperdescribesthedevelopmentprocessofJavaEE,andanalysissomefeaturesofJavaEE7,prospectofJavaEE8,finally,introductionthethirdpartyopensourceJavaEEframeworkinordertounderstandingofJavaEEdeeplyandbetterapplyit.Keyword:JavaEE0引言JavaEE(JavaPlatform,EnterpriseEdition)是sun公司推出的企业级应用程序版本。这个版本以前称为J2EE。能够为我们帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web2.0应用程序。Java,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Javaapplet.1JavaEE的发展历程(1)1991年4月:SunMicrosystems公司由JamesGosling领导的一个叫“Green”的项目;(2)1995年5月:Sun在SunWorld'95大会上正式发布Java;(3)1996年1月:Sun公司发布了Java开发工具包JDK1.0;(4)1997年2月:Sun公司发布了JDK1.1;(5)1998年:Sun公司发布了JKD1.2和JSP/Servlet、EJB规范;(6)1999年:Sun把Java2platform技术一分为三:J2SE、J2EE和J2ME;(7)2001年9月:在JDK1.3发布16个月后,Sun发布了J2EE1.3;(8)2003年11月:在JDK1.4发布21个月后,SUN发布了J2EE1.4;(9)2004年10月:Sun公司发布了期待已久的JDK1.5。相应的标准版称为JavaSE5.0,相应的企业版JavaEE5.0于2006年5月也正式发布;(10)2006年12月:JavaSE6.0发布,但相应的企业版在2009年12月才正式发布;(11)2009年12月:JavaEE6的发布;(12)2013年6月:甲骨文公司发布了JavaEE7。2浅析JavaEE72013年6月中旬甲骨文公司发布了JavaEE7,该版本的新特性主要集中在提高开发人员的生产力、加强对HTML5动态可伸缩应用程序的支持和进一步满足苛刻的企业需求这三个方面。图1JavaEE7新特性JavaEE7使得开发人员可以写更少的样板代码,通过丰富的组件来提供一个完整、全面、集成的堆栈来支持和构建最新的Web应用程序和框架,同时提供更具扩展性、丰富性和简易的功能。企业将会从便捷式批处理、改进的扩展性等新功能中获益。下面我们简单分析下JavaEE7的特性:(1)提高开发人员的生产力①减少冗余代码JavaEE7一直在致力于减少在核心业务逻辑代码运行前必须执行的样板代码。减少样板代码的三大核心区域是默认资源、JMS2.0和JAX-RS客户端API。JMS2.0在可伸缩性和可移植性上经历了重大的改进,减少了冗余代码,已运用在无数的产品部署上,事实证明它是一个良好的规范,能够较好地满足企业的需求。②更多带注释的POJO通过注释JavaEE使开发人员更专注于Java对象的编程而无需关注繁琐的配置。CDI现在默认情况下已不需要使用beans.xml文件就可以直接使用。开发人员可以不需要任何配置而是简单的使用@Inject来注入任何Java对象。包括新的资源注释@JMSDestinationDefinition和@MailSessionDefinition,使得开发人员在源代码中就可以指定元数据资源,简化了DevOps体验。③更紧密集成的平台JavaEE7为平台引入了易用的EJB容器管理事物,使用基于CDI拦截器的解决方案来保证事务可用在CDImanagedbeans和其它JavaEE组件中,把注释@Transactional应用到任何CDIbean或者任何支持事务的方法中。BeanValidation在JavaEE7中使用广泛,现在可以用于方法级别的验证,包括内置和自定义的约束。约束可被应用于方法的参数以及返回值。约束也可以使用灵活渲染和违反约束的字符串格式的JavaEE的表达语言。④通过精简现有技术来简化JavaEEJavaEE7中新增加了许多新的特性,有些老的特性和功能已经被更简单的特性所替代或直接弃用。JavaEE6为过时技术的弃用和功能的修剪引入了一个正式的流程,以下的API在JavaEE7中已成可选: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持久层模型所代替。(2)加强对HTML5动态可伸缩应用程序的支持①低延迟数据交换:JavaAPIforWebSocket1.0越来越多的web应用程序依赖于从中央服务器及时获取并更新数据。基于HTTP的WebSockets为解决低延迟和双向通信提供了一种解决方案。在WebSocketAPI的最基层是一个带注释的Java对象(POJO)②简化应用数据分析和处理:JavaAPIforJSONProcessing1.0JSON作为一个轻量级的数据交换格式被应用在许多流行的Web服务中用来调用和返回数据。许多流行的在线服务都是使用基于JSON的RESTful服务。在JavaEE7之前,Java应用程序使用了不同的类库去生成和解析RESTful服务中的JSON对象。然而,现在这个功能已被标准化。③可扩展的RESTful服务:JAX-RS2.0JAX-RS2.0增加了异步响应处理,这对于支持对数据有着高要求的HTML5客户端的扩展是至关重要的。异步处理是一种更好更有效利用线程处理的技术。在服务器端,处理请求的线程在等待外部任务去完成时应该避免阻塞,从而保证在这一时间段内到达的其他请求能够得到响应。同样的,在客户端,一个发出请求的线程在等待响应的时候也会发生阻塞,这影响了应用程序的性能。新的JAX-RS2.0异步客户端API使得客户端调用RESTful可以和其他客户端活动并行执行。异步的好处是使得一个客户端可以同时调用多个后台服务,对于一个使用者来说减少了总体的延迟时间。④增强开发的易用性:JSF2.2JavaServerFaces(JSF)是一种用于构建Web应用程序的Java新标准框架。它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化了开发。在这个版本中,JSF增加了对HTML5的支持。JSF2.2增加了一个叫“pass-throughelements”的新功能。并为现有的元素增加了一系列的新属性,如输入元素“tel”、“range”和“date”等。对于“pass-throughelements”,JSF渲染器将会忽略这些元素,只是把它们传给支持HTML5的浏览器,这使得可以利用现有的JSF组件来利用HTML5的特性来正常渲染。HTML5的动态性使得服务器端处理信息更新的请求不断增多,这可以使HTML5客户端快速得到响应。在JavaEE7中使用新的事件驱动APIServlet3.1从客户端读取数据将不会造成阻塞。如果有数据可用时,Servlet线程将会读取和处理这些数据,否则就去处理其他请求。(3)进一步满足苛刻的企业需求JavaEE十几年来一直努力满足企业的需求,使用Java连接器连接到企业服务端、使用Java事务支持事务处理、使用Java消息服务让系统间可以进行相互通信。现在企业希望利用开发人员的Java技能编写基于标准的API并能够跨平台运行的批处理应用程序。企业也需构建高度可扩展的应用来满足更高的服务要求并提高现有资产的利用率。ConcurrencyUtilities使得JavaEE开发人员编写可扩展的应用程序成为可能。3展望JavaEE8(1)JavaEE7已经发布快一年了(2013年6月发布),开发团队在这段时间内也一直在规划下一个大版本JavaEE8。近日,JavaEE社区开展了一项调查,看开发者希望哪些功能出现在JavaEE8版本中,下图展示了开发者认为应该包含在JavaEE8中的一些比较重要的JSR。其中79%的用户认JavaAPIforJSONBinding比较重要,其次是JCache和JavaEEConfiguration。图2调查表11关于HTML5在JavaEE8社区调查中,针对HTML5的改进建议一部分集中在全部或部分采用用户代理,其中有1/3的开发者建议标准化一个JavaScript框架,或者优化并集成一个特定框架。其他开发者建议在JavaEE和用户代理之间提供几种形式的直接绑定,建议标准化一个客户端适配层,比如Senchatouch或ApacheCordova。另一些开发者的建议主要集中在JSF上,认为应该进一步加强现有的JSF对HTML5支持情况,还建议改进JSF生成的标签。2关于NoSQL根据调查数据,使用JavaEE技术的开发者中,有32.1%的开发者使用NoSQL,对于JavaEE中NoSQL相关标准应该是什么样的,有46%的开发者认为应该基于JPA,有32.5%的开发者认为应该有一个新的API,还有16.2%的开发者认为只需一个简单的键值存储API即可。图3调查表2(2)根据调查,对JavaEE8的新特性提出了一些设想与展望:①改进CDI(ContextsandDependencyInjectionforJavaEE,上下文与依赖注入)。JavaEE8应该支持所有JSF组件,包括转换器和验证器,以及JASPIC组件;②更深入的修剪Pruning()和Deprecating(弃用)。应该延续JavaEE6和JavaEE7修剪与弃用的步伐,比如可以修剪EJB编程模型相关的所有东西;③标准化的缓存API。JCache缓存API原本将包含在JavaEE7中,但由于该API错过了重要的公共审查的最后期限,导致其没能成为JavaEE7的一部分;④平台范围内的配置。JavaEE应用程序可以使用部署描述文件(比如web.xml)进行配置,但该方法对于不同的开发阶段(如DEV、BETA、LIV