个人网站备案 法律说明,html5网页制作模板免费下载,万网虚拟机wordpress,企业网站建设 新天地网络在本系列的第2部分中 #xff0c;我使用SOA的“合同优先”技术创建和部署了产品实体服务#xff0c;现在#xff0c;我将致力于服务实现的NoSQL数据库方面。 正如我在第1部分中已经提到的那样#xff0c;我已经选择CouchDB作为我的NoSQL数据库#xff0c;选择Ektorp库作为… 在本系列的第2部分中 我使用SOA的“合同优先”技术创建和部署了产品实体服务现在我将致力于服务实现的NoSQL数据库方面。 正如我在第1部分中已经提到的那样我已经选择CouchDB作为我的NoSQL数据库选择Ektorp库作为数据库驱动程序。 CouchDB –轻松数据库。 CouchDB本质上将充当我的文档存储。 它本身以JSON格式 我认为实际上是称为BSON的二进制版本存储其文档并且不需要对文档的结构有先验知识。 您几乎可以存储任何内容甚至可以在同一数据库中混合使用不同类型的文档。 由于没有诸如DDL脚本或XSD架构之类的先前设置步骤因此上手可能很快。 实际上如果您可以使用CURL则无需任何操作只需向CouchDB发出HTTP命令即可存储您的东西。 就像它说的那样-CouchDB相当轻松。 有关CouchDB基础入门的完整说明请参阅CouchDB权威指南 。 从Java到JSON格式。 当然当我们使用Java时JSON作为基于String的表示形式使用起来并不方便。 这是Ektorp介入的地方使用Jackson Java-to-JSON库使事情顺利进行。 Jackson促进了Ektorp幕后的开箱即用POJO到JSON转换过程。 Jackson是该项目的重要功能因为我想实现从XML到Java对象再到数据库文档然后再返回的干净无忧的开发流程。 杰克逊是完成这项工作的关键组成部分我们将在后面看到。 CouchDB的文档存储先决条件。 尽管CouchDB不需要模式但每个文档确实需要两个基本数据唯一ID和文档修订号。 这些数据项有助于管理文档和实现幂等规则以帮助维护多用户环境中的文档完整性。 CouchDB希望将这些字段命名为_id和_revision 。 _id可以在创建操作期间由用户或数据库分配。 _revision由数据库分配每次文档记录更新时_revision都会递增。 现在显然我不希望将特定于数据库的字段放入XML文档中因此我对产品的定义有一个名为“ Id”的字段和一个名为“ Revision”的字段。 除非我做任何事情否则该文档将无法满足在CouchDB中存储的必要条件并且奇怪的事情将开始发生例如在运行时将额外的_id和_revision字段添加到数据库记录中而这些字段与Id和Revision不匹配。我要求CouchDB存储XML文档。 我不想为了添加这些数据库特定字段而更改产品的XML模式该怎么办 聪明地可以将Jackson配置为纠正此问题而无需触碰从Product XML架构派生的“ Product”对象的Java / JaxB定义。 可以说在运行时将产品的“ Id”和“修订”字段重新映射到CouchDb的“ _id”和“ _revision”字段。 这样可以保持一定程度的松散耦合但是允许我在我的代码中使用相同的JaxB生成的Java对象从而节省了大量的时间和精力。 访问数据库。 CouchDB无法通过JDBC访问并且没有传统的JDBC驱动程序。 相反它使用REST接口基于HTTP的GETPUTPOSTDELETE等并使用JSON格式的内容进行通信。 Ektorp提供了一些帮助程序类以帮助您使用CouchDB数据库。 有一个可实例化的Connector类可建立与数据库的可行连接还有一个可定制的RepositorySupport类该类提供了用于与数据库及其记录进行交互的类型安全的便捷方法。 创建一个DAO。 通过扩展名和类类型正确自定义后RepositorySupport类就可以用于您的所有基本数据访问对象要求例如GetCreateUpdate和Remove操作。 它也可以纯粹基于您添加到其中的方法的名称自动生成CouchDB视图只要它们遵循某些规则。 这样可以轻松地向您的DAO添加“查找”方法例如“ findByManufacturerName”或“ findByCategoryId”。 最后如果您需要更复杂的视图或映射/减少查询它也可以为您提供帮助。 全部拉在一起。 通过配置Jackson并使用Ektorp创建DAO现在只是编写一些集成测试以确保所有内容都可以在一起的一种情况。 我最初使用的测试非常简单我要求DAO进行... 创建一个新的JaxB产品对象并为其分配一个ID 将其保存到我的CouchDB“产品”数据库中 使用ID从“产品”数据库中读取产品对象 修改并更新产品对象 再次检索它检查版本是否增加 最后 删除产品对象并检查现在尝试读取它的操作是否失败 如果DAO代码可以完成所有这些事情那么我具有产品实体服务实现所需的基本行为。 但是由于这是一个集成测试因此我需要在测试周期中可用的CouchDB服务。 Maven可以通过使用Maven Failsafe插件将此类测试绑定到Maven构建生命周期的特定部分进行集成测试来帮助进行集成测试。 这样可以避免将集成测试与通常具有较少依赖性和运行时要求的普通单元测试混在一起。 使CouchDB在本地工作非常简单但是如果您不必为安装和设置过程所困扰也可以使用免费的云托管CouchDB开发实例 。 我都尝试过并且它们同样工作良好。 下一步是什么 现在我的CouchDB DAO已完成是时候进入项目的最后阶段了我将把DAO行为链接到我先前创建的Web Service功能。 为此我将使用Java Enterprise Edition 6。 如果您希望在下一期出版物发布时收到电子邮件通知请单击右侧的链接进行订阅。 继续第4部分 。 参考 使用NoSQL实施实体服务–第3部分我们的JCG合作伙伴 Ben Wilcock的CouchDB 位于SOABPMAgile和Java博客上。 翻译自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using_6090.html