介绍Java EE 6 Platform : Part 1
Java Platform,Enterprise Edition (Java EE) 作为业界标准使用Java语言来编写企业级的程序。基于稳固的Java平台基础和Standard Edition (Java SE),Java EE新增了一些库和系统服务以支持扩展性,访问性,安全性,整合性以及其他企业级程序的需求。
自从1999年它的最初发布,Java EE已经成长为一个拥有丰富函数且高性能的平台。平台最近发布的版本也强调了使用的简洁与简易。但事实上,随着当前发布的平台,Java EE 5,企业级程序的开发从未变得更加简单迅速。
过程还在继续。平台下一个发布版本,Java EE 6,加入了意义重大的新技术,其中的一些受到了生机勃勃的Java社区的启发。它使得平台更加简化,扩展的可用性改善了之前的Java EE发布版本。
本文强调了一些Java EE 6中的一些重大改善。
Contents
Java EE 6 目标
这些是Java EE 6平台的主要目标 :
l 更加灵活的技术栈 随着时间的增长,Java EE变得很大,在某些情况下对某些确定类型的程序来说简直是臃肿。作为补救,Java EE 6引进了profiles的概念,Java EE平台的配置为程序的一些特有的类进行设计。一个profile或许包含一个源自Java EE平台技术,其他的源自Java 标准化组织认可的技术的子集,但并不是Java EE或两者的一部分。J2EE引入的这些profiles的第一个,就是Web Profile,一个Java EE平台的子集,用于设计web程序开发。Web Profile仅仅包含大多数web程序开发人员需要的技术,而不包括那些开发人员明显不需要的企业技术。
另外,Java EE 6平台已经支持许多用于pruning的候选技术。这些候选技术包括那些被新技术替代的技术,或者是那些并未被广泛部署的技术。Pruning一个技术意味着在下一次发布中它将变为一个可选的而不是必选的部分。
l 增强的扩展性 时间更迭,对于web程序或企业程序的开发人员来说,那些可以使用的新技术变得有吸引力。与其将这些技术添加到平台,从而使其无限制的增长,Java EE 6选择了比之前提供更多的可扩展点和服务提供接口。这允许在你的Java EE 6的标准执行过程中外挂一些技术—甚至是框架。之后你便像使用Java EE 6 平台内置的组件一样简单的使用这些技术。
重点强调的扩展性曾被置于web层之上。Web程序的开发人员经常在他们的项目中使用第三方的框架。但是,注册这些框架导致Java EE web程序变得复杂,常常需要开发人员添加或修改庞大且复杂的XML配置文件。Java EE 6中这些框架将自行注册,这使得它在一个项目中的整合与配置变得简单。
l 更简单的开发 Java EE 5可以使得开发web和企业程序变得更加的简易。比如,Java EE 5引进了一个更加简单的基于Plain Old Java Objects (POJOs)和注释的企业程序设计模型,并且剔除了XML配置的需要。另外,Enterprise JavaBeans (EJB)技术是经过简化的,仅需更少的类和接口利用Java Persistence API (非正式地指JPA)就可以提供更加简单的对象相关的映射方法。
Java EE 6 开发企业或web程序甚至比这还要简单。在平台中可用性在很多地方都得到了改进。例如,你可以使用注释来定义诸如servlet和servlet过滤器这类web组件。此外,一系列用于依赖注入的注释变得标准化,这使得框架中的可注入的类更加巧妙。此外,Java EE程序简化了打包需求。例如,你可以向一个web archive (WAR)文件中直接添加enterprise bean。而无需将一个enterprise bean打包进一个Java archive (JAR)文件,然后再将该JAR放入一个enterprise archive (EAR)文件
强大的新技术
Java EE 6添加了重要的新技术使得平台更加强大。下面是其中的三个:
l 用于RESTful Web Services的Java API (JAX-RS)
l Bean验证
用于RESTful Web Services的Java API(JAX-RS)
用于RESTful Web Services的Java API (JAX-RS), JSR 311使得你可以迅速创建符合软件结构Representational State Transfer (REST)风格的轻量级web服务。REST中的一个重要概念就是资源的存在性,每一个设计到全局标识符的就是,一个URI。尤其是,数据和函数资源可以通过URI识别并访问。为了操作这些资源,网络的组件,客户端和服务端,通过一个标准化的接口进行交流,例如HTTP和一系列短小的固定的动词—GET,PUT,POST和DELETE并且交换这些资源的表现。
RESTful web services是按照REST结构风格创建的web services。通过RESTful方法创建web services涌现出的一个流行的选择就是使用基于SOAP的技术。感谢REST的轻量级和直接通过HTTP传播数据的能力。
JAX-RS提供了一个在Java中创建Restful web service的标准API。该API提供了一系列的注释,相关类和接口。应用注释于POJO中可以让你接触web资源。在Java中这种方法让创建RESTful web services变得简单。
最初发布的技术的说明,JAX-RS 1.0,于2008年10月完成,而且一个叫做Jersey的参考案例也可以使用了。Java EE 6包含最新发布的技术,JAX-RS 1.1,一个维护版本,令拥有新特性的JAX-R共同溶合于Java EE 6。
让我们看看使用了JAX-RS的RESTful web services
import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.Get; import javax.ws.rs.Post; import javax.ws.rs.Consumes; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; import javax.ws.rs.core UriInfo; import javax.ws.rs.core.UriBuilder; import java.net.URI; @Path ("items") @Produces (MediaType.APPLICATION_XML) Public class ItemsResource { @Context UriInfo uriInfo; @GET Items listItems() { Return Allitems(); } @POST @Consumes (MediaType.APPLICATION_XML) Public Response create(Item item) throws ItemCreationException { Item newItem = createItem(item); URI newItemURI = uriInfo.getRequestUriBuilder().path(newItem.getId()).build(); return Response.created(newItemURI).build(); } ... }
在这个例子中,ItemsResource
就是一个管理了一系列项目的webservice。Import的那些类用于JAX-RS 1.1的注释,类和接口。
@Path
注释指定了资源的一个相对路径,在这里就是"items"
。类资源的URI是基于程序的上下文。所以如果这个例子中程序的上下文是http://example.com
,类资源的URL是http://example.com/items
。这意味着如果客户端直接访问URI http://example.com/items
,类ItemsResource
就会处理它。
@GET
注释指定了注释的方法,这里listItems()
方法处理HTTP GET方法。当一个客户端为了访问ItemsResource
资源直接向URI发起一个HTTP GET请求,JAX-RS运行时调用listItems()
方法处理GET
请求。
注意@Produces
注释。它指定了资源中的方法可以生产并返回的MIME media类型。在ItemsResource
例子中,@Produces
注释指定MediaType.APPLICATION_XML
。The MediaType类是一个MiME media类型的抽象。
Constants向类提供对抽象的特定的media type的检验。MediaType.APPLICATION_XML
规范是MME media type的XML内容的抽象,"application/xml".。