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

nosql的数据服务

现在该开始使用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对象,这些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的数据服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weblogic双机热备部署linux,WebLogic应用在集群环境下的一些基本知识【转载】

4.2.1 基本概念1.硬件的cluster和WebLogic的cluster不是一回事,硬件做的是冷备份,对用户的session,用户请求的负载均衡等的处理是做不到 的,而且一般硬件的双机热备也不是时时的备份,而是间隔一段时间再将主…

vmware中centos6.4突然无法进入图形界面解决方法

今天遇到vmvare中centos6.4进度条走完了仍然没有进入图形界面,在网上找到了解决方法记录如下: 1. 按CtrlAltF5并输入root账号密码进入命令界面 2. vim /etc/inittab 打开/etc/inittab文件,并将文件最后id:5改为id:3,即将运行等级…

教程:正确的SLF4J日志记录用法以及如何检查它

SLF4J是一个非常流行的日志记录外观,但是,就像我们使用的所有库一样,我们有可能以错误的方式或至少以非最佳方式使用它。 在本教程中,我们将列出常见的日志记录错误以及如何使用FindBugs检测到它们。 我们还将在相关时提及PMD和S…

linux逐行扫描,FFmpeg怎么区分识别视频是逐行扫描还是隔行扫描

最近遇到要识别隔行扫描的视频加以特殊转码处理的问题。google了一番以后找到两个解决的方式,记录一下。方法一:使用隔行扫描检查滤镜idet区分隔行扫描和逐行扫描ffmpeg -filter:v idet \ -frames:v 100 \ -an \ -f rawvideo -y /dev/null \ -i 351.mp4 …

JDBC学习笔记 day1

JDBC的基本概念: JDBC就是java database connectivity,即java数据库连接。 JDBC主要完成的几个任务分别为 与数据库建立一个连接  向数据库发送SQL语句  处理数据库返回的结果JDBC的作用: 将java程序语言编写出来的程序,与数据…

稀疏矩阵的转置c语言程序,程序有问题求大神,稀疏矩阵转置

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #define N 100typedef int DataType;typedef struct{int i,j;DataType v;}TriTupleNode;typedef struct{TriTupleNode data[N];int m,n;int t;}TriTupleTable;void TransMatrix(TriTupleTable *b,TriTupleTable *a);void …

jsf组件不显示_JSF组件库–质量不只是零缺陷

jsf组件不显示自从我上次查看三个主要JSF组件库的质量以来已经有一段时间了。 在2009年12月,我开始比较RichFaces,Primefaces和ICEfaces的整体软件质量 。 从那时起,事情发生了变化,从现在开始,我想重新评估和更新它。…

linux安装mysql(shell一键安装)

1. 相关文件(install_mysql.sh、my.cnf、mysqld相关内容在文中最后面) 2. 将上面的文件上传到linux服务器某一目录下 3.给install_mysql.sh赋执行权限 # chmod x instll_mysql.sj 4. 执行install_mysql.sh # ./install_mysql.sh 5. 验证 6. install_mysq…

c语言编译时检查逻辑错误吗,C语言陷阱与技巧20节,自定义“编译时”assert方法,在代码编译阶段检查“逻辑”错误...

在C语言程序开发中,程序员写代码时应该考虑的“面面俱到”,这样才能写出功能稳定的程序。例如,在实现 open() 函数时,先完成它的功能固然是重要的,但是程序员还需要考虑各种“意外”,比如下面这种情况。假设…

springboot 多个sevice类实现同一接口的调用

参考页面:http://blog.csdn.net/xiao190128/article/details/54890759/;感谢分享 service 是有用的相当于 xml配置中得bean id service 也可以不指定 不指定相当于 bean id com. service.service 就是这个类的全限定名,表示给当前类命名一个别名&a…

影场与属性访问器界面

卡尔迪亚(Carl Dea)最近跟踪了我的一篇名为“ 保存内存”的博客文章! 为属性使用阴影字段 。 在他的博客中,他建议使用一个称为“属性访问器”的接口来消除使用阴影字段所需的大量样板代码。 卡尔还提到他尚未用大量数据测试他的方…

[ZJOI2012]数列

超级水的题还wa了一次 首先很容易发现其实就只有两个值并存 然后 要注意把数组初始化啊。。。可能后面有多余的元素&#xff08;对拍的时候由于从小到大就没跑出错&#xff09; #include <bits/stdc.h> using namespace std; int a[170],b[170],a1[170],a2[170],x1[170],…

在c语言中,可以使用动态内存分配技术定义元素个数可变的数组,C语言复制在线考题1精选.doc...

C语言复制在线考题1精选窗体顶端《C语言程序设计208304》综合测试返回测验列表大项 1 / 2 - 单项选择题60.0/ 70.0 分本大题共35道&#xff0c;每题2分&#xff0c;共计70分&#xff0c;答错、不答均不得分。题目 1 / 552.0/ 2.0 分有字符数组 a[80]和 b[80]&#xff0c;则正确…

信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言

满意答案Dcool2016.08.27采纳率&#xff1a;58% 等级&#xff1a;9已帮助&#xff1a;416人队列&#xff1f;&#xff1f;你每输入一个节点将其存入队列中&#xff0c;再输入它的左孩子&#xff0c;它的左孩子也会入队&#xff0c;我们取的时候应先取该节点的左孩子&#xf…

jboss4 java_JBoss核心Java Web服务

jboss4 java这篇博客文章涉及Web服务。 好吧&#xff0c;更确切地说&#xff0c;它处理JBoss上的“普通” java Web服务。 这意味着我们将创建一个没有任何其他框架&#xff08;例如CXF&#xff0c;Axis等&#xff09;的Web服务。 JBoss它自己提供对Web服务的支持。 因此&#…

Java中的注解是如何工作的?

自Java5.0版本引入注解之后&#xff0c;它就成为了Java平台中非常重要的一部分。开发过程中&#xff0c;我们也时常在应用代码中会看到诸如Override&#xff0c;Deprecated这样的注解。这篇文章中&#xff0c;我将向大家讲述到底什么是注解&#xff0c;为什么要引入注解&#x…

android 广告弹出层,安卓广告活动弹窗控件 android-adDialog

软件介绍android-adDialog&#xff0c;一个简单、强大的广告活动弹窗控件。显示一个默认广告弹窗&#xff0c;支持单广告活动、多广告活动&#xff0c;当弹窗显示多广告是默认显示底部小圆圈&#xff0c;当显示单活动时默认不显示底部小圆圈&#xff1b;默认支持弹窗从上&#…

面试技巧

本人是一名95后的老奶奶了&#xff0c;是一名彻头彻尾的程序媛&#xff0c;这是本人的第一篇博客&#xff0c;只是随笔&#xff0c;写写自己的心得而已&#xff0c;写的不好勿喷&#xff01;&#xff01;&#xff01; 学习计算机大概已经四年了&#xff0c;在这期间接触过各种计…

(企业 / 公司项目)如何使用分布式任务调度框架Quartz集成 和 SpringBoot自带的定时任务集成?

SpringBoot自带的定时任务 首先在你的微服务项目中创建一个新的模块&#xff0c;定时调度模块 pom.xml里面关联公共模块common的依赖其他不需要改变 然后启动类别删&#xff0c;启动项目是否报错&#xff0c;写一个简单的测试类访问路径是否成功 package com.jiawa.train.bat…

在Spring中配置多个View解析器

1.简介 在Spring中&#xff0c;提供了View Resolver来使用模型中可用的数据来解析视图&#xff0c;而无需与JSP&#xff0c;Velocity或Thymeleaf等View技术紧密绑定。 Spring可以根据需要轻松灵活地配置一个或多个View Resolver 。 2. Spring MVC应用程序流程 在继续理解多个V…