InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Enunciate: Java 代码优先、契约编译的Web服务部署框架

作者 James Kao 译者 邹文艳 发布于 2007年4月5日

领域
企业架构,
运维 & 基础架构,
过程 & 实践,
语言 & 开发
主题
SOAP ,
WSDL ,
消息传送 ,
Java EE ,
Java ,
SOA平台 ,
Web服务 ,
构建系统 ,
SOA ,
语言 ,
XFire ,
编程 ,
架构 ,
Apache Axis ,
企业架构 ,
SOA Appliance
Enunicate是一个J2EE Web服务部署框架,它提供了一个创建SOAP、REST、JSON等终端(endpoint)的从开发到部署完整系统,上周发布了1.0版本。Enunciate已经在许多博客论坛上引起关注。Enunciate并不是像Axis2XFire这样的Web服务协议栈,它使用XFire和Spring来提供代码优先的开发模型,这样就增强了编译期的契约兼容性。
Enunciate对于Web服务开发的创新之处在于,将所有的部件置于一个在源代码中定义和维护的API中(与之相反的是所有这些文件都定义在一个已编译好的字节文件中),这意味着Web服务的开发可以完全在源代码中,你可以使用自己喜欢的IDE来维护它,从而降低了开发门槛。然而,如果从初始的源代码开始开发,Enunciate可以在正式契约中通过强制开发者在编译期解决一些不明确或者存在潜在危险的问题,从而避免代码优先开发时所共有的问题。这种开发模式被称作“编译契约”。
Robert Cooper写道:“Enunciate会把Java服务实现看作一系列POJO或者JSR-181注释文件(annotated stuff),并且生成一个带有支持SOAP服务、REST服务、JSON服务和不带JavaDoc痕迹文档等功能的Xfire的WAR文件。”

关键点是在项目的编译打包活动之前,增加了一个“生成”步骤。这一步不仅仅围绕开发者的service类生成了样板文件代码,而且验证了API模型:
在Enunciate的处理中,生成这一步是最重要的。在这一步中,确定了API模型。这意味着把API的源代码读出、分析、并且加载到一个抽象表(Form)中,这个表以终端Interface、数据结构、REST、故障描述等形式描述了API。这个抽象的表就被称作API模型(或简称为“模型”)。

如果API源码中有错误将不能建立API模型,这些异常会被立即抛出,并挂起编译。当模型建立后,接着开始验证。对于一些默认的验证规则,模型可以随意取用,包括规约校验、协作约束、和不支持的API定义等。注意,在这一步,协作约束和清楚的API是必须的,校验错误和警告都在引擎挂起前集中显示给用户。(如果只有警告,则引擎不会挂起)
当Enunciate使用代码优先和“编译契约”的开发模型作为其特性时,有人指出说,目前已经证明代码优先没有什么用,除非你能确保使Web服务和生命期长的服务(long-lived services,可以无需中断公共API而改变底层代码的服务)通过契约优先的方式协同工作。做为回应,Enunciate的Ryan Heaton指出,在编译器使用versioning强制执行协作规则(rule)要特别小心,现在Enunciate还没有明确地支持契约优先的开发。

 未来Enunciate的功能会包括支持终端Versioning、.NET客户端、SMTP终端、WS-*,甚至可以生成一个可用的简单Web服务服务器而不仅仅只是一个WAR。

译者简介:邹文艳是InfoQ中文站的志愿者翻译,活跃于Java开发技术社区,曾参与Spring 2.0 开发手册中文化项目。加入InfoQ中文站志愿者翻译队伍,请邮件至china-editorial@infoq.com