nosql的数据服务_使用NoSQL实现实体服务–第2部分:合同优先
nosql的數(shù)據(jù)服務(wù)
現(xiàn)在該開始使用NoSQL項目對SOA實體服務(wù)進行編碼了,并且正如我所承諾的,我將從Web服務(wù)的合同開始。 看一下本系列的第1部分 。這種從Web服務(wù)合同定義開始的技術(shù)是面向服務(wù)的體系結(jié)構(gòu)實現(xiàn)的“合同優(yōu)先”方法的核心,并具有許多技術(shù)優(yōu)勢,包括……
- 正邏輯對合同的耦合(因為實現(xiàn)代碼遵循合同)。
- 消費者對合同的正耦合(因為消費者與合同耦合)。
- 避免合同與實施的耦合(在實施影響合同的情況下)。
- 避免了合同與技術(shù)的耦合(消費者變得依賴于實現(xiàn)技術(shù))。
我不想繼續(xù)進行合同優(yōu)先的SOA,但這確實很重要。 實際上,這是某些Web服務(wù)框架(例如受人尊敬的Spring Web Services)所允許的唯一方法。 這里將詳細解釋Springsource僅支持合同優(yōu)先方法的理由。
我的服務(wù)的商業(yè)案例。
我決定實現(xiàn)一個用于管理“產(chǎn)品”實體的Web服務(wù),我將其稱為“ 產(chǎn)品實體服務(wù) ”。 產(chǎn)品信息管理 (或簡稱為PIM)是一種非常常見的業(yè)務(wù)活動,因此,我的實體服務(wù)應(yīng)具有很大的重用潛力。 我個人知道這是正確的,因為我以前有零售和國防物流方面的經(jīng)驗,但是如果我想證明這種情況,我通常會分析業(yè)務(wù)流程并尋找所有有利于產(chǎn)品信息的地方。 如果這樣做,我可能會發(fā)現(xiàn)以下業(yè)務(wù)流程將成為產(chǎn)品實體服務(wù)的潛在消費者(例如,在傳統(tǒng)零售環(huán)境中)…
- 購買,產(chǎn)品購買和入職
- 銷售訂單捕獲
- 銷售訂單履行
- 客戶服務(wù)
- 目錄制作
- 業(yè)務(wù)2-業(yè)務(wù)支持
- 等等等
我的產(chǎn)品實體服務(wù)的運營。
因為我創(chuàng)建的服務(wù)純粹是管理產(chǎn)品實體的任務(wù),所以我將使操作保持基本狀態(tài)。 我的服務(wù)將為消費者提供創(chuàng)建,讀取,更新,刪除和查找操作。 該服務(wù)將是具有WS-I互操作性證書的基于SOAP的Web服務(wù),以幫助確保跨平臺與眾多消費者的兼容性。 稍后,我可能還會提供同一服務(wù)的REST版本(通常稱為并發(fā)合同模式)。
然后,我的服務(wù)使用者(可能是其他服務(wù)或流程)可以隨心所欲地使用這些產(chǎn)品實體,例如,通過提供更多與業(yè)務(wù)相關(guān)的功能來支持產(chǎn)品工作流程,例如“批準”或“中止”。
我的服務(wù)合同將使用Web服務(wù)描述語言( WSDL )進行描述。 我傾向于手工制作這些,然后對照WS-I基本概要文件進行檢查,以確保已創(chuàng)建可互操作的合同。 WSDL并不是特別友好的文件,但是我認為任何優(yōu)秀的SOA架構(gòu)師都應(yīng)該能夠編寫一個。
產(chǎn)品實體的數(shù)據(jù)模型。
產(chǎn)品數(shù)據(jù)實體應(yīng)該能夠描述對企業(yè)有價值的現(xiàn)實生活中的產(chǎn)品。 每個企業(yè)對于此數(shù)據(jù)項應(yīng)包含的內(nèi)容都有自己的想法,因此,為了使其簡單起見,我將定義一些基本字段,例如id,名稱,描述,制造商,類別和大小 。 我還將添加一些內(nèi)部管理字段,例如版本,創(chuàng)建/更新/刪除的日期等。最好將這些數(shù)據(jù)視為“文檔”,因為SOA和NoSQL肯定會從以文檔為中心的視圖中受益。世界。
產(chǎn)品文檔將使用XML Schema(即XSD )進行描述。 我也傾向于手工完成這些工作,并且在結(jié)構(gòu)中使用了很多模塊化來幫助支持模式集中化模式,該模式促進了SOA中使用的數(shù)據(jù)模型之間的重用性和互操作性。 這種技術(shù)通常稱為創(chuàng)建“規(guī)范數(shù)據(jù)模型”,該模型描述一個中央模型中的所有業(yè)務(wù)實體。
創(chuàng)建Java服務(wù)。
既然服務(wù)合同已經(jīng)完成,我準備創(chuàng)建我的Maven項目并開始實施服務(wù)。 為此,我使用最新的Netbeans IDE,因為它具有用于啟動Maven項目和導入WSDL進行實施的出色向?qū)А?Maven幫助代碼編譯,打包,部署和測試,以及管理依存關(guān)系并為我的服務(wù)執(zhí)行代碼生成。 這兩個工具都是免費的。
WSDL導入過程將創(chuàng)建一個Java接口,該接口代表并反映服務(wù)的合同。 它還創(chuàng)建了一組Java對象,這些Java對象代表服務(wù)用作消息的XML結(jié)構(gòu)。 這些對象由導入例程使用JAXB批注進行批注。 JAXB提供將XML文本“編組和解組”到Java對象中的功能。 作為JAX-WS Web服務(wù)框架的一部分,這種情況在后臺不可見地發(fā)生。
我現(xiàn)在要做的就是在服務(wù)上創(chuàng)建方法的實現(xiàn)。 首先,我只是添加一些基本的樣板代碼以使某些功能正常工作。 完成之后,我將服務(wù)部署到服務(wù)器上,并進行一些基本的集成測試,以檢查它們是否全部掛在一起,以及服務(wù)端點是否按預(yù)期公開。 我為此使用的服務(wù)器是Oracle的Glassfish 3.1 ,它可以集成到Netbeans中,并且也是免費的。
初始服務(wù)集成測試
我使用SOAP UI進行服務(wù)測試,因為它是免費的并且非常強大。 它幾乎可以用作幾乎所有SOAP或REST服務(wù)的測試工具,并且使用這樣的測試工具將使我不必構(gòu)建工作的服務(wù)客戶端,而這很耗時。
我應(yīng)該提到,可以使用SOAP-UI以完全測試驅(qū)動的方式完成服務(wù)開發(fā),但是從一開始就部署基本服務(wù)(即使它不起作用)也比較容易,只是為了從中獲取它的WSDL。它是使用“ http:// service?wsdl”約定的端點,并檢查是否已正確部署和集成所有內(nèi)容。 如果我不這樣做,那么我就可以開始使用WSDL,但是端點位置將無法工作,因此測試失敗的原因不是邏輯不好,而是因為普遍缺乏服務(wù)可用性。
現(xiàn)在,我可以創(chuàng)建基本測試,以在Glassfish本地托管的服務(wù)實現(xiàn)和SOAP-UI測試客戶端之間成功地向后和向前傳遞產(chǎn)品消息,即使這些消息不執(zhí)行任何操作并且其中包含的產(chǎn)品不執(zhí)行任何操作堅持下去。
下一步是開始CouchDB集成,以便可以持久保存產(chǎn)品消息并從NoSQL數(shù)據(jù)庫中檢索該消息。 然后,在服務(wù)和CouchDB DAO之間,我將添加使它全部表現(xiàn)正常所需的任何業(yè)務(wù)邏輯。
立即訂閱以在啟動CouchDB DAO時收到警報。 如果您錯過了本日記系列的第1部分,則可以在這里趕上 。
到目前為止的費用:
- 軟件–£0。
- 時間-2到8個小時(取決于經(jīng)驗)。
參考: 使用NoSQL實施實體服務(wù)–第2部分:我們的JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上的合同優(yōu)先 。
翻譯自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using_8619.html
nosql的數(shù)據(jù)服務(wù)
總結(jié)
以上是生活随笔為你收集整理的nosql的数据服务_使用NoSQL实现实体服务–第2部分:合同优先的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果手机如何清理缓存和垃圾
- 下一篇: nosql的数据服务_使用NoSQL实现