{"id":1850,"date":"2012-09-10T10:00:00","date_gmt":"2012-09-10T10:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/implementing-entity-services-using-nosql-part-1-outline.html"},"modified":"2012-10-22T06:57:45","modified_gmt":"2012-10-22T06:57:45","slug":"implementing-entity-services-using_10","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html","title":{"rendered":"Implementing Entity Services using NoSQL &#8211; Part 1: Outline"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement <a href=\"http:\/\/www.soaglossary.com\/entity_service.php\" target=\"_blank\">Entity services<\/a> (also known as Data Services).<\/p>\n<p>Entity service is a classification of service coined in the Service Technology series of books from Thomas Erl. It\u2019s used to describe services that are highly agnostic and reusable because they deal primarily with the persistence of information modelled as business data \u2018entities\u2019. The ultimate benefit of having thin layer of these entity services is in the ease at which you can re-use them to support more complex service compositions.         <i>       <\/p>\n<p>This approach is further described in the <a href=\"http:\/\/soapatterns.org\/entity_abstraction.php\" target=\"_blank\">Entity Abstraction SOA pattern<\/a>.        <\/i>        <\/p>\n<p>Entity service layers are therefore a popular architectural choice in SOA, and implementing them has meant big business for vendors like Oracle and IBM, both of whom offer software to support this very task. There is even a separate standard for technologies in this area called <a href=\"http:\/\/en.wikipedia.org\/wiki\/Service_Data_Objects\" target=\"_blank\">Service Data Objects<\/a> (or SDO for short).         <\/p>\n<p>This is all well and good, but these applications come with dedicated servers and specialised IDE\u2019s and its all a bit \u2018heavyweight\u2019. These specialised solutions can be terribly expensive if all you really want are some simple CRUD-F operations (Create, Read, Update, Delete, Find) on a service that manages the persistence of a simple canonical data type like a Product or a Customer.         <\/p>\n<p>So the usual and basic implementation method would be to break out the Java and use a normal relational database with something like <a href=\"http:\/\/en.wikipedia.org\/wiki\/Java_Persistence_API\" target=\"_blank\">JPA<\/a> (Java Persistence API) to help you with the object\/relational mapping and persistence. This is a good choice and it can simplify the code a great deal, but there are still challenges. In web services where XML is being used as the payload, there is still the matter of converting between <a href=\"http:\/\/en.wikipedia.org\/wiki\/Java_Architecture_for_XML_Binding\" target=\"_blank\">JAXB<\/a> generated Java objects and the Java objects used to persist data via JPA. You can use something like <a href=\"http:\/\/benwilcock.wordpress.com\/2010\/03\/11\/using-hyperjaxb3-in-restful-services\/\" target=\"_blank\" title=\"RESTful service with HyperJaxb3 (Part 1 \u2013 Goals)\">HyperJaxB<\/a> to annotate JAXB objects with JPA annotations, making the resulting data objects dual purpose, but you still have some issues with versioning and get none of the scalability advantages of NoSQL. Besides, I\u2019ve used this method before in an <a href=\"http:\/\/benwilcock.wordpress.com\/2010\/03\/07\/hyperjaxb3-xml-to-java-to-database-and-back-again\/\" target=\"_blank\" title=\"Hyperjaxb3: XML to Java to Database (and back again)\">earlier blog<\/a>, so it where\u2019s the fun doing it again?         <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><strong>Using NoSQL.<\/strong>        <\/p>\n<p>A relatively new and enticing alternative is to use a NoSQL database for persistent storage. NoSQL databases have proved incredibly popular over the last few years, due mainly to their ability to achieve huge scalability and strong resilience. Lots of very high profile and high throughput websites use NoSQL datastores to manage and persist their data including Goole, Twitter, Foursquare, Facebook, and Ebay.         <i>       <\/p>\n<p>The term NoSQL is used to describe \u201ca class of database management system identified by its non-adherence to the widely used relational database management system (RDBMS) model\u201d \u2013 <a href=\"http:\/\/en.wikipedia.org\/wiki\/NoSQL\" target=\"_blank\">Wikipedia<\/a>.        <\/i>        <\/p>\n<p>NoSQL datastores do not follow the conventional wisdom of a relational table based approach opting instead for a schema-less data structure that\u2019s often \u2018document centric\u2019 and capable of supporting very large volumes of data in highly distributed environments.         <\/p>\n<p><strong>Choosing a NoSQL Database.<\/strong>        <\/p>\n<p>There are lots of different NoSQL implementations, so I won\u2019t go into detail here other than to say that my requirements were simple. I wanted something\u2026         <\/p>\n<ul>\n<li>available via 3rd party <a href=\"http:\/\/en.wikipedia.org\/wiki\/Platform_as_a_service\" target=\"_blank\">PaaS<\/a> providers like Amazon and Jelastic<\/li>\n<li>that uses a document store approach (as opposed to key\/value or graph)<\/li>\n<li>open source and freely available<\/li>\n<li>with a good Java API<\/li>\n<li>with good developer documentation<\/li>\n<li>that can be installed locally<\/li>\n<li>which I could administer myself (easier the better since I don\u2019t want to be a DBA)<\/li>\n<\/ul>\n<p>In the end my database choices came down to the two market leaders: <a href=\"http:\/\/www.mongodb.org\/\" target=\"_blank\">MongoDB<\/a> and <a href=\"http:\/\/couchdb.apache.org\/\" target=\"_blank\">CouchDB<\/a>. Mongo has a great Java API, it\u2019s popular with the Java community and it has good developer documentation. However, its admin features are rather unfriendly, with just a command line to keep you company. CouchDB, on the other hand, is much friendlier thanks to its \u2018Futon\u2019 UI. CouchDB has most of the technical benefits of Mongo (certainly in this R&amp;D setting) but it lacks an out of the box Java API (REST is the default interface). Luckily, the Java community has stepped in with a number of native Java drivers for CouchDB, the best for me being the <a href=\"http:\/\/ektorp.org\/\" target=\"_blank\">Ektorp<\/a> library which is very simple to use but also very effective.         <\/p>\n<p><strong>Summary.<\/strong>        <\/p>\n<p>My goals for this R&amp;D exercise are to:         <\/p>\n<ol>\n<li>implement a viable entity service using a contract-first approach (Web Service bound to SOAP, fully WS-I compliant contract and with predefined data structures).<\/li>\n<li>discover if using a NoSQL database rather than JPA for data persistence and retrieval can increase developer productivity and reducing the overall effort of entity service implementation.<\/li>\n<li>Use the following SOA patterns: Service Facade (separates business logic), Contract\/Schema Centralisation (canonical contract hosted via a <a href=\"http:\/\/benwilcock.wordpress.com\/2011\/07\/13\/build-a-diy-service-repository\/\" title=\"How to build a DIY Service Repository\">simple service repository<\/a>), Decoupled Contract, Concurrent Contract (SOAP &amp; REST (maybe)), Message Metadata (headers) and Service Agent (for validation).<\/li>\n<\/ol>\n<p>Essentially I want to build the entity service by using as little Java code as possible but at the same time preserve the contract-first approach. A contract-first approach is vital for good SOA development because it allows for a <a href=\"http:\/\/soaprinciples.com\/service_loose_coupling.php\" target=\"_blank\">looser coupling<\/a> between the consumer and the service and doesn\u2019t corrupting the relationship with lots of technology specific dependencies like database table definitions and data types.         <\/p>\n<p>The main technologies I\u2019ll be using for this development will be Java (JEE), Jax-WS, JaxB, CouchDB &amp; Ektorp and Glassfish v3. As usual I\u2019ll also be using Maven and Jenkins. All are production ready applications and frameworks, but because they\u2019re open source the total cost so far is \u00a30.00.         <\/p>\n<p>In the next article in this series I\u2019ll be telling you how I got started on the development of the service, beginning with the web service contract or \u2018WSDL\u2019.         <\/p>\n<p><strong>Update:<\/strong><\/p>\n<p>It seems I\u2019m on trend for once, with a number of interesting NoSQL articles coming to light in the last few days\u2026         <\/p>\n<p>InfoQ asks \u2018<a href=\"http:\/\/www.infoq.com\/articles\/warner-couchdb\" target=\"_blank\">What is CouchDB<\/a>\u2018 which is an article that I could have done with about a month ago. It\u2019s a fairly comprehensive \u2018getting started\u2019 guide and contains more detail that I\u2019ll go into regarding coding with CouchDB. Therefore, I\u2019d advise that anyone looking for a more step by step Java coding guide to check out the article straight away.         <\/p>\n<p>The InfoQ article also references two other blog posts that could be of interest to architects. The first is a <a href=\"http:\/\/kkovacs.eu\/cassandra-vs-mongodb-vs-couchdb-vs-redis\" target=\"_blank\">comparison of a number of different NoSQL databases<\/a> (including Cassandra Tom!), and the second is a handy <a href=\"http:\/\/blog.nahurst.com\/visual-guide-to-nosql-systems\" target=\"_blank\">NoSQL selection guide<\/a>.         <\/p>\n<p>Continue to <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_8619.html\">Part 2<\/a>.<\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/benwilcock.wordpress.com\/2012\/07\/02\/implementing-entity-services-using-nosql-part-1\/\">Implementing Entity Services using NoSQL \u2013 Part 1: Outline<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Ben Wilcock at the <a href=\"http:\/\/benwilcock.wordpress.com\/\">SOA, BPM, Agile &amp; Java<\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data Services). Entity service is a classification of service coined in the Service Technology series of books from Thomas Erl. It\u2019s used to describe services that are highly agnostic and reusable &hellip;<\/p>\n","protected":false},"author":268,"featured_media":57,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[116,113],"class_list":["post-1850","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-apache-couchdb","tag-nosql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Implementing Entity Services using NoSQL - Part 1: Outline - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementing Entity Services using NoSQL - Part 1: Outline - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-09-10T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-22T06:57:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-couchdb-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"136\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ben Wilcock\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ben Wilcock\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html\"},\"author\":{\"name\":\"Ben Wilcock\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/2d350b077826f7d46a210509a397f080\"},\"headline\":\"Implementing Entity Services using NoSQL &#8211; Part 1: Outline\",\"datePublished\":\"2012-09-10T10:00:00+00:00\",\"dateModified\":\"2012-10-22T06:57:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html\"},\"wordCount\":1130,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-couchdb-logo.jpg\",\"keywords\":[\"Apache CouchDB\",\"NoSQL\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html\",\"name\":\"Implementing Entity Services using NoSQL - Part 1: Outline - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-couchdb-logo.jpg\",\"datePublished\":\"2012-09-10T10:00:00+00:00\",\"dateModified\":\"2012-10-22T06:57:45+00:00\",\"description\":\"Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-couchdb-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-couchdb-logo.jpg\",\"width\":150,\"height\":136},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using_10.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Implementing Entity Services using NoSQL &#8211; Part 1: Outline\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/2d350b077826f7d46a210509a397f080\",\"name\":\"Ben Wilcock\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/56494aa90104dce5c0d913dc53446ba80d85fd0c49e799cc026cc39b0c521c98?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/56494aa90104dce5c0d913dc53446ba80d85fd0c49e799cc026cc39b0c521c98?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/56494aa90104dce5c0d913dc53446ba80d85fd0c49e799cc026cc39b0c521c98?s=96&d=mm&r=g\",\"caption\":\"Ben Wilcock\"},\"sameAs\":[\"http:\\\/\\\/benwilcock.wordpress.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Ben-Wilcock\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Implementing Entity Services using NoSQL - Part 1: Outline - Java Code Geeks","description":"Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html","og_locale":"en_US","og_type":"article","og_title":"Implementing Entity Services using NoSQL - Part 1: Outline - Java Code Geeks","og_description":"Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data","og_url":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-09-10T10:00:00+00:00","article_modified_time":"2012-10-22T06:57:45+00:00","og_image":[{"width":150,"height":136,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-couchdb-logo.jpg","type":"image\/jpeg"}],"author":"Ben Wilcock","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Ben Wilcock","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html"},"author":{"name":"Ben Wilcock","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/2d350b077826f7d46a210509a397f080"},"headline":"Implementing Entity Services using NoSQL &#8211; Part 1: Outline","datePublished":"2012-09-10T10:00:00+00:00","dateModified":"2012-10-22T06:57:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html"},"wordCount":1130,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-couchdb-logo.jpg","keywords":["Apache CouchDB","NoSQL"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html","url":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html","name":"Implementing Entity Services using NoSQL - Part 1: Outline - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-couchdb-logo.jpg","datePublished":"2012-09-10T10:00:00+00:00","dateModified":"2012-10-22T06:57:45+00:00","description":"Over the past few weeks I\u2019ve been doing some R&amp;D into the advantages of using NoSQL databases to implement Entity services (also known as Data","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-couchdb-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-couchdb-logo.jpg","width":150,"height":136},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Implementing Entity Services using NoSQL &#8211; Part 1: Outline"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/2d350b077826f7d46a210509a397f080","name":"Ben Wilcock","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/56494aa90104dce5c0d913dc53446ba80d85fd0c49e799cc026cc39b0c521c98?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/56494aa90104dce5c0d913dc53446ba80d85fd0c49e799cc026cc39b0c521c98?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/56494aa90104dce5c0d913dc53446ba80d85fd0c49e799cc026cc39b0c521c98?s=96&d=mm&r=g","caption":"Ben Wilcock"},"sameAs":["http:\/\/benwilcock.wordpress.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/Ben-Wilcock"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/268"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1850"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1850\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/57"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}