實體服務是托馬斯·埃爾(Thomas Erl)的《服務技術》叢書中提出的服務分類。 它用于描述高度不可知和可重用的服務,因為它們主要處理建模為業務數據“實體”的信息的持久性。 擁有這些實體服務的薄層的最終好處是可以輕松地重用它們以支持更復雜的服務組合。
在實體抽象SOA模式中進一步描述了此方法。
因此,實體服務層是SOA中流行的體系結構選擇,實現它們對于Oracle和IBM這樣的供應商來說意味著巨大的業務,這兩家供應商都提供軟件來支持這一任務。 在這一領域,甚至還有一個單獨的技術標準稱為服務數據對象 (簡稱SDO)。
這一切都很好,但是這些應用程序帶有專用的服務器和專用的IDE,并且都帶有“重量級”。 如果您真正想要的只是在管理諸如產品或客戶之類的簡單規范數據類型的持久性的服務上執行一些簡單的CRUD-F操作(創建,讀取,更新,刪除,查找),這些專用解決方案就會非常昂貴。
因此,通常的基本實現方法是突破Java并使用帶有JPA (Java持久性API)之類的常規關系數據庫來幫助您進行對象/關系映射和持久性。 這是一個不錯的選擇,它可以大大簡化代碼,但是仍然存在挑戰。 在將XML用作有效負載的Web服務中,仍然存在在JAXB生成的Java對象和用于通過JPA持久化數據的Java對象之間進行轉換的問題。 您可以使用HyperJaxB之類的東西用JPA注釋來注釋JAXB對象,從而使結果數據對象具有雙重用途,但是您在版本控制方面仍然存在一些問題,并且沒有NoSQL的可伸縮性優勢。 此外,我之前在較早的博客中就使用過這種方法,那么再次進行這種操作又有什么樂趣呢?
使用NoSQL。
一個相對新穎且誘人的選擇是使用NoSQL數據庫進行持久存儲。 在過去的幾年中,NoSQL數據庫被證明非常受歡迎,這主要是由于它們具有實現巨大的可伸縮性和強大的彈性的能力。 許多高知名度和高吞吐量的網站都使用NoSQL數據存儲來管理和保留其數據,包括Goole,Twitter,Foursquare,Facebook和Ebay。
NoSQL一詞用于描述“一類數據庫管理系統,該類數據庫管理系統因不遵守廣泛使用的關系數據庫管理系統(RDBMS)模型而被識別” – Wikipedia 。
NoSQL數據存儲區沒有遵循基于關系表的方法的傳統智慧,而是選擇了一種無模式的數據結構,該結構通常以“文檔為中心”,并且能夠在高度分布式的環境中支持大量數據。
選擇NoSQL數據庫。
有許多不同的NoSQL實現,因此除了要說我的要求很簡單之外,在這里我將不做詳細介紹。 我想要點什么...
- 可通過Amazon和Jelastic等第三方PaaS提供商獲得
- 使用文檔存儲方法(與鍵/值或圖相反)
- 開源且免費提供
- 具有良好的Java API
- 具有良好的開發人員文檔
- 可以在本地安裝
- 我可以自己管理(因為我不想成為一名DBA,所以越輕松越好)
最后,我的數據庫選擇取決于兩個市場領導者: MongoDB和CouchDB 。 Mongo有一個很棒的Java API,在Java社區中很流行,并且有很好的開發人員文檔。 但是,它的管理功能相當不友好,只有一個命令行可以讓您陪伴。 另一方面,由于其“ Futon” UI,CouchDB更加友好。 CouchDB具有Mongo的大部分技術優勢(肯定是在此R&D設置中),但缺少現成的Java API(REST是默認接口)。 幸運的是,Java社區已經介入了許多用于CouchDB的本地Java驅動程序,對我來說最好的是Ektorp庫,該庫使用非常簡單,但也非常有效。
摘要。
我進行此研發活動的目標是:
- 使用合同優先的方法(綁定到SOAP的Web服務,完全符合WS-I的合同以及預定義的數據結構)實現可行的實體服務。
- 發現是否使用NoSQL數據庫而不是JPA進行數據持久性和檢索可以提高開發人員的生產率并減少實體服務實現的總體工作量。
- 使用以下SOA模式:服務外觀(分離業務邏輯),合同/模式集中化(通過簡單服務存儲庫托管的規范合同),解耦合同,并發合同(SOAP和REST(可能)),消息元數據(標頭)和服務代理(用于驗證)。
本質上,我想通過使用盡可能少的Java代碼來構建實體服務,但同時保留契約優先的方法。 契約優先的方法對于良好的SOA開發至關重要,因為它允許使用者與服務之間的松散耦合 ,并且不會破壞與許多技術特定的依賴關系(如數據庫表定義和數據類型)之間的關系。
我將用于此開發的主要技術是Java(JEE),Jax-WS,JaxB,CouchDB&Ektorp和Glassfish v3。 和往常一樣,我還將使用Maven和Jenkins。 所有這些都是可用于生產的應用程序和框架,但是由于它們是開源的,所以到目前為止的總成本為0.00英鎊。
在本系列的下一篇文章中,我將告訴您如何從Web服務合同或“ WSDL”開始著手開發服務。
更新:
似乎我一次走上潮流,最近幾天出現了許多有趣的NoSQL文章……
InfoQ詢問“ 什么是CouchDB ”,這是我一個月前可能寫的一篇文章。 這是一個相當全面的“入門”指南,其中包含有關CouchDB編碼的更多詳細信息。 因此,我建議任何尋求一步一步的Java編碼指南的人都可以立即查看本文。
InfoQ文章還引用了架構師可能感興趣的其他兩個博客文章。 第一個是對多個不同NoSQL數據庫 (包括Cassandra Tom!)的比較,第二個是方便的NoSQL選擇指南 。
繼續第2部分 。
參考: 使用NoSQL實現實體服務–第1部分: JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上的概述 。
翻譯自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using_10.html