现在该开始使用NoSQL项目对SOA实体服务进行编码了,并且正如我所承诺的,我将从Web服务的合同开始。 看一下本系列的第1部分 。

这种从Web服务合同定义开始的技术是面向服务的体系结构实现的“合同优先”方法的核心,并具有许多技术优势,包括……

  • 正逻辑对合同的耦合(因为实现代码遵循合同)。
  • 消费者对合同的正耦合(因为消费者与合同耦合)。
  • 避免合同与实施的耦合(在实施影响合同的情况下)。
  • 避免合同与技术之间的耦合(消费者变得依赖于实施技术)。

我不想继续进行合同优先的SOA,但这确实很重要。 实际上,这是某些Web服务框架(例如受人尊敬的Spring Web Services)所允许的唯一方法。 这里将详细解释Springsource仅支持合同优先方法的原因。

我服务的商业案例。

我决定实现一个用于管理“产品”实体的Web服务,我将其称为“ 产品实体服务 ”。 产品信息管理 (简称PIM)是一种非常常见的业务活动,因此,我的实体服务应具有很大的重用潜力。 我个人知道这是正确的,因为我以前有零售和国防物流方面的经验,但是如果我想证明这种情况,我通常会分析业务流程并寻找所有有利于产品信息的地方。 如果这样做,我可能会发现以下业务流程将成为产品实体服务的潜在消费者(例如,在传统零售环境中)…

  • 购买,产品购买和入职
  • 销售订单捕获
  • 销售订单履行
  • 客户服务
  • 目录制作
  • 业务2-业务支持
  • 等等等

我的产品实体服务的运营。

因为我要创建的服务纯粹是管理产品实体,所以我将使操作保持基本状态。 我的服务将为消费者提供创建,读取,更新,删除和查找操作。 该服务将是具有WS-I互操作性证书的基于SOAP的Web服务,以帮助确保跨平台与众多消费者的兼容性。 稍后,我可能还会提供同一服务的REST版本(通常称为并发合同模式)。

然后,我的服务使用者(可能是其他服务或流程)可以随心所欲地使用这些产品实体,例如,通过提供更多与业务相关的功能来支持产品工作流程,例如“批准”或“中止”。

我的服务合同将使用Web服务描述语言( WSDL )进行描述。 我倾向于手工制作这些文件,然后根据WS-I基本概要文件进行检查,以确保已创建可互操作的合同。 WSDL并不是特别友好的文件,但是我认为任何优秀的SOA架构师都应该能够编写一个。

产品实体的数据模型。

产品数据实体应该能够描述对企业有价值的现实生活中的产品。 每个企业对于此数据项应包含的内容都有自己的想法,因此,为了使其简单起见,我将定义一些基本字段,例如id,名称,描述,制造商,类别和大小 。 我还将添加一些内部管理字段,例如版本,创建/更新/删除的日期等。最好将这些数据视为“文档”,因为SOA和NoSQL肯定会从以文档为中心的视图中受益。世界。

产品文档将使用XML Schema(即XSD )进行描述。 我也倾向于手工完成这些工作,并且在结构中使用了很多模块化来帮助支持模式集中化模式,该模式促进了SOA中使用的数据模型之间的重用和互操作性。 这种技术通常称为创建“规范数据模型”,该模型描述一个中央模型中的所有业务实体。

创建Java服务。

既然服务合同已经完成,我准备创建我的maven项目并开始实施服务。 为此,我使用最新的Netbeans IDE,因为它具有用于启动Maven项目和导入WSDL进行实施的出色向导。 Maven帮助代码编译,打包,部署和测试以及管理依赖关系并为我的服务执行代码生成。 这两个工具都是免费的。

WSDL导入过程将创建一个Java接口,该接口代表并反映服务的合同。 它还创建了一组Java对象,这些对象表示服务用作消息的XML结构。 这些对象由导入例程使用JAXB批注进行批注。 JAXB提供将XML文本“编组和解组”到Java对象中的功能。 作为JAX-WS Web服务框架的一部分,这种情况在后台不可见地发生。

我现在要做的就是在服务上创建方法的实现。 首先,我只是添加一些基本的样板代码以使某些功能正常工作。 完成此操作后,我将服务部署到服务器上,并进行一些基本的集成测试,以检查它们是否全部悬挂在一起,以及服务端点是否按预期公开。 我为此使用的服务器是Oracle的Glassfish 3.1 ,它可以集成到Netbeans中,并且也是免费的。

初始服务集成测试

我将SOAP UI用于我的服务测试,因为它是免费的并且非常强大。 它几乎可以用作几乎所有SOAP或REST服务的测试工具,并且使用这样的测试工具将使我不必构建工作的服务客户端,而这可能是非常耗时的。

我应该提到,可以使用SOAP-UI以完全测试驱动的方式完成服务开发,但是从一开始就部署基本服务(即使它不起作用)也很容易,只是为了从中获取它的WSDL。是使用“ http:// service?wsdl”约定的端点,并检查是否已正确部署和集成所有内容。 如果我不这样做,那么我就可以开始使用WSDL,但是端点位置将无法工作,因此测试失败的原因不是逻辑不好,而是因为普遍缺乏服务可用性。

现在,我可以创建基本测试,以在Glassfish本地托管的服务实现和SOAP-UI测试客户端之间成功地向后和向前传递产品消息,即使这些消息不执行任何操作并且其中包含的产品不执行任何操作坚持下去。

下一步是开始CouchDB集成,以便可以保留和从NoSQL数据库检索产品消息。 然后,在服务和CouchDB DAO之间,我将添加使它全部表现正常所需的任何业务逻辑。

当我启动CouchDB DAO时,立即订阅以获得警报。 如果您错过了本日记系列的第1部分,则可以在这里赶上 。

到目前为止的费用:

  • 软件–£0。
  • 时间– 2到8个小时(取决于经验)。
继续第3部分 。

参考: 使用NoSQL实施实体服务–第2部分:我们的JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上的合同优先 。

翻译自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using_8619.html

使用NoSQL实现实体服务–第2部分:合同优先相关推荐

  1. nosql怎么使用_使用NoSQL实施实体服务–第5部分:使用云提高自治性

    nosql怎么使用 在之前的文章中,我讨论了如何通过结合使用Java Web Services , Java EE和CouchDB NoSQL数据库为产品构建SOA"实体"服务. ...

  2. nosql的数据服务_使用NoSQL实现实体服务–第1部分:概述

    nosql的数据服务 在过去的几周中,我一直在进行一些研发工作,以了解使用NoSQL数据库实现实体服务 (也称为数据服务)的优势. 实体服务是Thomas Erl的<服务技术>丛书中提出的 ...

  3. java nosql_使用NoSQL实现实体服务–第4部分:Java EE

    java nosql 现在,我已经准备好了一个框架式的合同优先型Web服务,并使用Ektorp和CouchDB创建了一个数据访问层 ,是时候将它们连接到一个可以正常工作的实体服务中了 . 为此,我将使 ...

  4. nosql的数据服务_使用NoSQL实现实体服务–第3部分:CouchDB

    nosql的数据服务 在本系列的第2部分中 ,我使用SOA的"合同优先"技术创建和部署了产品实体服务,现在,我将致力于服务实现的NoSQL数据库方面. 正如我在第1部分中已经提到的 ...

  5. nosql的数据服务_使用NoSQL实现实体服务–第2部分:合同优先

    nosql的数据服务 现在该开始使用NoSQL项目对SOA实体服务进行编码了,并且正如我所承诺的,我将从Web服务的合同开始. 看一下本系列的第1部分 . 这种从Web服务合同定义开始的技术是面向服务 ...

  6. 使用NoSQL实施实体服务–第5部分:使用云提高自治性

    在先前的文章中,我讨论了如何通过结合使用Java Web Services , Java EE和CouchDB NoSQL数据库为产品构建SOA"实体"服务. 在本系列的最后一篇文 ...

  7. 使用NoSQL实现实体服务–第1部分:概述

    在过去的几周中,我一直在进行一些研发工作,以了解使用NoSQL数据库实现实体服务 (也称为数据服务)的优势. 实体服务是托马斯·埃尔(Thomas Erl)的<服务技术>丛书中提出的服务分 ...

  8. 使用NoSQL实现实体服务–第4部分:Java EE

    现在,我已经准备好了框架式的合同优先型Web服务,并使用Ektorp和CouchDB创建了数据访问层 ,是时候将它们连接到一个可以正常工作的实体服务中了 . 为此,我将使用Java EE和Glassf ...

  9. 使用NoSQL实现实体服务–第3部分:CouchDB

    在本系列的第2部分中 ,我使用SOA的"合同优先"技术创建和部署了产品实体服务,现在,我将致力于服务实现的NoSQL数据库方面. 正如我在第1部分中已经提到的那样,我已经选择Cou ...

最新文章

  1. c语言修改elf文件crc32,hash/crc32
  2. WINCE+6410 拨号上网
  3. 移动界面控件Essential Studio for Mobile MVC图表控件解析
  4. 在共享dll中使用mfc_在SpringBoot中使用Spring Session解决分布式会话共享问题
  5. sql 语言中 when case 用法
  6. 3个多月,近3000人参与的源码共读,诚邀加入~
  7. curd操作php代码,Laravel 5.6中的CURD操作(代码示例详解)
  8. 如何删除 eclipse 中多余的 Tomcat server?为什么产生这种 bug?
  9. 技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议
  10. Microsoft Office 2016(ProPlus/Visio/Project) VOL 简体中文版
  11. Tensor A must be from the same graph as Tensor B
  12. SAP SLT数据同步配置
  13. 手机数据网络慢怎么修改服务器,手机网速慢怎么回事 这三种方法可以一试
  14. java判断所有域名后缀_使用Java的IO操作,提取全世界所有的三位域名后缀
  15. js使用moment获取当前日期是当前月的第几周
  16. 2800首无损格式经典歌曲分享
  17. 多重假设检验:Bonferroni 和 FDR
  18. 照片损坏了无法显示还能修复么?
  19. css背景透明文子不透明,CSS 实现背景透明 内容文字不透明 显示
  20. SPSS数据类型学习

热门文章

  1. stomp 连接错误: Whoops! Lost connection to http://localhost:8080/spring13/stomp 的解决方法
  2. java native关键字(java本地方法)
  3. 最小生成树——Prim(普利姆)算法
  4. //rest风格写_REST /使用提要发布事件
  5. jdk8 npe_JDK 14中更好的NPE消息
  6. 安装openstack_午餐前如何安装OpenStack Cloud
  7. spring 安全编码_Spring安全性和密码编码
  8. 框架中建立浮动框架_建立代理,而不是框架
  9. Java开发趋势:2019年展望
  10. java常见_关于Java的常见误解