使用NoSQL實現實體服務–第2部分:合同優先

現在該開始使用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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php hugepage,【原創】解決Redis啟動報錯:Transparent Huge Pages (THP) support enabled in your kernel...

問題背景Redis啟動報錯:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.This will create latency and memory usage issues with Redis.To fix this issue run the command echo never > /sys/kernel/mm/transparent_hugepage/…

hibernate cascade的真正含義

hibernate cascade 是 OneToOne OneToMany ManyToOne ManyToMany等注解的屬性&#xff0c;表示級聯操作。 /*** (Optional) The operations that must be cascaded to* the target of the association.** <p> By default no operations are cascaded.*/CascadeType[] cas…

射線碰撞檢測

在我們的游戲開發過程中&#xff0c;有一個很重要的工作就是進行碰撞檢測。例如在射擊游戲中子彈是否擊中敵人&#xff0c;在RPG游戲中是否撿到裝備等等。在進行碰撞檢測時&#xff0c;我們最常用的工具就是射線&#xff0c;Unity 3D的物理引擎也為我們提供了射線類以及相關的函…

高級ZK:異步UI更新和后臺處理–第1部分

異步UI更新非常有用&#xff0c;因為它們通常可以提高響應性&#xff0c;可用性和用戶界面的總體感覺。 我將在這里重點介紹ZK框架&#xff0c;但是通常&#xff0c;相同的原理也適用于桌面UI&#xff08;Swing&#xff0c;SWT&#xff09;。 長時間運行的處理 有時&#xff0…

php注冊登錄遍寫入 遍驗證,自動注冊登錄驗證機制的php代碼

在phpwind站點后臺添加“廣告管家”(CNZZ的一款廣告投放的應用)的應用&#xff0c;整個“廣告管家”通過iframe載入&#xff0c;載入的具體內容根據不同站點顯示針對該站點的具體內容。出于意用性方面的考慮&#xff0c;需要以下二點&#xff1a;1、首次進入“廣告管家”頁面自…

轉載:tensorflow保存訓練后的模型

訓練完一個模型后&#xff0c;為了以后重復使用&#xff0c;通常我們需要對模型的結果進行保存。如果用Tensorflow去實現神經網絡&#xff0c;所要保存的就是神經網絡中的各項權重值。建議可以使用Saver類保存和加載模型的結果。 1、使用tf.train.Saver.save()方法保存模型 tf.…

php url傳遞變量,php – 在laravel中通過url傳遞變量

我是laravel的新手,我正在努力讓我的網址格式正確.格式為http://mysite/blog?category1 instead of http://mysite/blog/category1這些是我正在使用的文件,有沒有辦法將路由放入BlogControllerRoute.phpRoute::get(blog/{category}, function($category null){// get all the…

Apache Wicket:記住我的功能

在Web應用程序中&#xff0c;具有“記住我”功能非常普遍&#xff0c;該功能使用戶每次訪問我們的網站時都能自動登錄。 可以使用Spring Security來實現這種功能&#xff0c;但我認為將基于請求的身份驗證框架與基于組件的Web框架結合使用并不是最好的主意。 這兩個世界不能很好…

Ubuntu 安裝中文

系統環境&#xff1a; 1. 官網 http://pinyin.sogou.com/linux/ 下載安裝包。 2. 先運行 apt-get update 。 3. 再運行 apt-get -f install 。 4. 再運行 可能有的UBuntu系統自帶了。 5. 如果下載的搜狐輸入法安裝包的格式為 .deb 的&#xff0c; 運行 &#xff1a; dpk…

Eigen教程(10)

整理下Eigen庫的教程&#xff0c;參考&#xff1a;http://eigen.tuxfamily.org/dox/index.html 混淆 在Eigen中&#xff0c;當變量同時出現在左值和右值&#xff0c;賦值操作可能會帶來混淆問題。這一篇將解釋什么是混淆&#xff0c;什么時候是有害的&#xff0c;怎么使用做。 …

matlab把符號數,Matlab?符號與數值之間的轉換

符號運算得到的是精確的解析解&#xff0c;但是有時需要進行數值轉換&#xff0c;主要通過以下幾個函數實現。1.digits 函數調用方法&#xff1a;digits(D)函數設置有效數字個數為D的近似解精度。2.vpa 函數vpaVariable-precision arithmeticSyntaxR vpa(A)R vpa(A,d)Descrip…

JSF組件庫–質量不只是零缺陷

自從我上次研究三個主要JSF組件庫的質量以來&#xff0c;已經有一段時間了。 2009年12月&#xff0c;我開始比較RichFaces&#xff0c;Primefaces和ICEfaces的整體軟件質量 。 從那時起&#xff0c;事情發生了變化&#xff0c;從現在開始&#xff0c;我想重新評估和更新它。 我…

[API檔案]GetDlgItem

函數功能 用于獲取指定對話框函數控件的句柄。 API函數原型 1 HWND WINAPI GetDlgItem( 2 _In_opt_ HWND hDlg, //指向包含該對話框的句柄 3 _In_ int nIDDlgItem //第二個參數是控件的名稱 4 ); 范例 可參見ComboBox_AddString宏的范例【點擊這里】轉載于:ht…

嵌入式實時系統的任務設計

嵌入式實時系統的任務設計主要為任務函數的設計、任務優先級的安排、任務的數據結構設計&#xff0c;任務之間的同步與通信設計。 一&#xff0e;任務函數的設計 任務函數按任務結構可分為單次執行任務、周期執行任務和事件觸發任務&#xff0c;各任務的主要差異點如下&#xf…

mssql php 5.4,PHP5.4如何連接MSSql Server2005

windows系統下&#xff0c;PHP5.3以上的版本已經不支持mssql擴展&#xff0c;所以如果你需要和sql server通信需要到http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx自行下載微軟提供的The SQL Server Driver for PHP。下載后解壓縮&#xff0c;將所有的.dll文件拷貝…

將原生SQL功能休眠到您的Spring Data Repository中

JPA為您提供NamedNativeQuery以便使用本機SQL。 但是&#xff0c;用法不是很方便&#xff0c;尤其是當您需要在本機SQL中映射多個實體時。 您必須定義一組容易出錯的SqlResultSetMapping映射。 對于以前使用過Hibernate本機SQL功能的用戶&#xff0c;您會發現它比JPA的NamedNat…

創建yii的第一個應用

原文鏈接轉載于:https://www.cnblogs.com/Baronboy/p/6354522.html

字符串匹配(KMP 算法 含代碼)

主要是針對字符串的匹配算法進行解說 有關字符串的基本知識傳統的串匹配法模式匹配的一種改進算法KMP算法網上一比較易懂的解說小樣例1計算next 2計算nextval代碼有關字符串的基本知識 串&#xff08;string或字符串&#xff09;是由零個或多個字符組成的有限序列&#xff0c;一…

php數組轉為js json,javascript-將數組php轉換為JSON時出錯

我在將多維PHP數組轉換為JSON時遇到了一些麻煩.我使用json_encode進行了轉換,但它為null.我正在嘗試開發orgChart,數據是從CSV文件中讀取的,并保存在數組中.布局和JS代碼用于接收JSON文件,因此我需要使用這種格式.這是數組的一部分,其中包含175個數組Array([2] > Array([id]…

UVa 10954 全部相加(Huffman編碼)

https://vjudge.net/problem/UVA-10954 題意&#xff1a;有n個數的集合S&#xff0c;每次可以從S中刪除兩個數&#xff0c;然后把它們的和放回集合&#xff0c;直到剩下一個數。每次操作的開銷等于刪除的兩個數之和&#xff0c;求最小開銷。 思路&#xff1a;Huffman編碼。 1 #…