如何建立DIY服务资料库

每个绝地都面对他们生命中的时刻,他们的光剑根本无法达到预期的表现,他或她咬​​紧牙关,制造出了更好的。

我不是绝地武士,显然没有光剑的用处,但是我确实经常受到服务注册表和存储库的刺激。 这些工具通常声称支持良好的SOA原则和实践(例如可发现性和合同优先服务开发),但是在我看来,它们经常无法兑现宣传。

服务注册中心/存储库分为两个基本阵营。 有通常的嫌疑人和较小的开放源代码尝试提供的大型商业产品。

作为一个轻量级的敏捷型人(从字面上看,不是可悲的是),我受制于强大的价值与成本伦理。 在我看来,商业产品基本上太庞大,太苛刻且太昂贵,以至于没有任何兴趣。 这样一来,开放源代码产品在地面上就很少了,它们的功能有限,而且我认为跨学科的用户团队将需要的功能还没有经过深思熟虑。

因此,总而言之,我决定使用低成本的开放源代码工具和技术来构建自己的“ DIY简单服务存储库”。

我想从我的简单服务存储库中获得什么。

良好的服务存储库应支持良好的服务导向原则。 具体而言,服务存储库应允许高度程度的服务合同标准化,支持合同版本控制,促进合同优先服务开发并实现易于发现的服务(最好在设计时和编译时)。 让我解释一下这些要求的含义。

合同标准化是通过集中诸如XML Schemas ,抽象WSDLWS-Policy文档之类的工件来支持服务合同中的抽象松耦合联合重用的实践。 XML Schema的重用特别重要,因为它是“固有互操作性”的关键推动因素,通过这种互斥性,服务可以使用相同的数据模型进行通信。 通过将所有合同,数据模型和策略放在一个位置,我可以轻松随意地重复使用它们。

合同版本控制可能是一个非常困难的过程,但是我想要一个简单的解决方案,其中所有有关合同版本,策略和数据模型的决策都是我的。 我不会在简单的服务存储库中提出太多要求,我只是希望它在彼此独立的版本控制目录中保存“发行版”。 我希望发布可以通过URL寻址,并可以在用户浏览器中查看。

合同优先开发 (基于SOAP的Web服务)非常重要,因为它可以确保服务合同保持松散耦合并独立于基础实现技术。 合同优先通常需要服务设计人员设计所需的合同,然后开发人员将其“导入”到其构建中,以此作为服务实现代码的基础。 对于可能习惯于控制自己命运的开发人员而言,这通常可能会带来一些不适感,因此使其成为一个简单的过程可以帮助克服可能出现的任何反对意见。

最后,轻松的服务发现性有益于面向服务的体系结构,因为通过使服务具有更高的可见性,我们可以更轻松地重用它们,还可以防止“意外”重复发生。 重复,竞争,未使用或冗余的服务可能会混淆并削弱SOA的有效性和功能,从而影响其为社区服务的能力。 如果任何人都可以随时轻松找到服务合同,则可以避免这些问题(并促进重复使用)。

通过创建一个集中存储服务合同(以及其他设计时信息,例如WS-I BP合规性文档或人类可读接口文档)的场所,我们可以实现所有这些目标,并为我们的SOA分析,设计和开发实践增加一些实际价值。

输入:SOAGrowers的“简单服务存储库”。

所以这是我的解决方案。 只需按照我的3个简单步骤,您将立即拥有一个简单的服务库...

1.使用Maven创建一个Java Web应用程序(简单服务存储库应用程序)。

该项目的源代码托管在我的SVN服务器中 。 该应用程序包括用于WSDL,XSD和WS-Policy文档的可浏览文件夹,而SVN可以很好地控制所有内容。 HTML和CSS提供了将所有内容绑定在一起的基本粘合剂,但是如果您不喜欢HTML,则可以使用Wiki进行调查。 如果您想看看现实生活中的样子,我在下面提供了一些屏幕截图。

2.将简单服务存储库应用程序构建并部署到应用程序服务器。

Jenkins是一个开源持续集成服务器,是我Glassfish服务器上的另一个应用程序。 Jenkins被配置为在发现SVN存储库中发生更改时构建并部署我的应用程序。

对于Java Web应用程序, Glassfish 3.1是我选择的个人应用程序服务器,其他服务器也可以正常工作。 托管后,可通过浏览器立即访问简单服务存储库HTML页面,并且我还使用了特定的Glassfish部署描述符,该描述符使我的内容文件夹默认情况下可浏览。 这些功能有助于满足我的基本“设计时可发现性”要求。

Jenkins构建我的服务时,它将调用Maven的“安装”,该安装会将简单服务存储库Web应用程序[WAR]及其包含的所有服务合同作为版本化的Maven工件放入我的Maven存储库中。 下一点非常方便...

3.从简单服务存储库中托管的合同中构建基于SOAP的Web服务(并对其进行测试)。

在使用“ JAX-WS”插件通过Java创建Java服务实现框架之前,Maven再次采取了补救措施,在“初始化”阶段使用Maven“复制”插件从Maven工件存储库中的WAR中提取服务合同。提取的WSDL合同。 如果我不喜欢复制方法,则可能会要求wsimport仅使用合同的URL(指向应用程序服务器上WSDL的简单服务存储库的副本)。

其余的工作很简单–普通的样板JAX-WS服务实现代码。 在我的构建中,我使用用于Maven的Cargo插件将服务实现部署到Glassfish,并使用SoapUI的Maven插件在每次构建期间运行服务集成测试套件。

在构建服务器上,该服务也由Jenkins构建,但是这次是由成功重建Simple Service Repository应用程序触发的。 这样,如果我的服务的服务合同发生更改,我的应用程序将立即重新构建并重新测试,这样我就可以知道我是否在系统中引入了缺陷。

在某些非常简单的情况下,服务项目非常轻巧,仅包含几个类文件。 因为JAX-WS可以进行基于注释的部署,所以元数据的方式很少,例如部署描述符等。

运行中的简单服务存储库解决方案的整体视图。

运行中的简单服务存储库解决方案的整体视图。

做得好吗

至此,简单服务存储库的0.1版已完成。

它集中存储了我的服务合同,使它们可被发现,它支持合同优先开发,并且它在提醒我是否对我的合同进行了更改而使我的服务实现不稳定时。 它甚至支持基于简单发布的合同和数据模型版本控制。

在我看来,它完全适合简短的要求。 它具有高可用性,可访问性,可重复性,可管理性,并提供了宝贵的平台,可支持服务设计人员与服务开发人员之间的紧密协作。

更重要的是,它非常容易创建。 它需要零代码(如果您不将HTML视为代码),它花费了我大约一天的开发时间,并且很好地利用了现有的低成本开源工具和技术。 它还需要很少的基础架构,并且可以在普通笔记本电脑上很好地运行。 我什至可以将其放入云中,而无需进行过多的开发工作。

总而言之,我仍然不是绝地武士(不幸的是),但是我对自己的“ DIY”简单服务存储库比对其他任何人都更快乐。

找到更多…

您想要简单服务存储库的副本吗? 您要我开源吗?

评论,订阅或与我联系以获取更多信息。

演示:

单击下面的屏幕快照,可以查看本文详细介绍的我的版本库的在线演示。

参考: 如何通过我们的JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上构建DIY服务库


翻译自: https://www.javacodegeeks.com/2012/08/how-to-build-diy-service-repository.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值