BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 James Kao 关注 0 他的粉丝 ,译者 邹文艳 关注 0 他的粉丝 发布于 2007年4月6日. 估计阅读时间: 4 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。
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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT