{"id":1846,"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-5-improving-autonomy-using-the-cloud.html"},"modified":"2012-10-22T06:57:04","modified_gmt":"2012-10-22T06:57:04","slug":"implementing-entity-services-using","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html","title":{"rendered":"Implementing Entity Services using NoSQL &#8211; Part 5: Improving autonomy using the Cloud"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_8619.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 2: Contract-first\">Java Web Services<\/a>, <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_389.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 4: Java EE\">Java EE<\/a> and the <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_6090.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 3: CouchDB\">CouchDB NoSQL<\/a> database. In this final post in the series I\u2019m going to leverage some of the technical assets that I\u2019ve created and implement some new user stories using some popular <a href=\"http:\/\/www.soapatterns.org\/\">SOA patterns<\/a>. Take a look at <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html\">Part 1<\/a> and <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_8619.html\">Part 2<\/a> as well.<\/p>\n<p>My current Product Entity Service implementation is very business process agnostic, and therefore highly re-usable in any scenario where consumers want to discover or store Product information. However, as it stands the Product Entity Service is designed to be used within a trusted environment. This means that there are no restrictions on access to operations like Create, Update or Delete.  This is fine within a strictly controlled corporate sandbox but what if I want to share some of my service operations or Product information with non trusted users?         <\/p>\n<p>Lets imagine that in addition to our in-house use of the Product Entity Service we also wanted to cater for the following agile \u2018user story\u2019\u2026         <\/p>\n<p><i><strong>So that:<\/strong> My published product information is accurate and constantly available to off-site customers.<br \/>\n <strong>As a:<\/strong> Sales Director &amp; IT Manager.<br \/>\n <strong>We want to:<\/strong> Offer a highly-available \u2018read-only\u2019 copy of my product information to off-site users and systems.        <\/i>        <\/p>\n<p>This scenario is not uncommon in business and I\u2019ve implemented user stories like it in the past with some of <a href=\"http:\/\/benwilcock.wordpress.com\/customers\/\" title=\"Clients\">my clients<\/a>.  But what\u2019s fantastic about the technologies that we\u2019re using to implement our Entity service (Java\/JAX-WS and CouchDB NoSQL) is that they make developing this scenario very easy.         <\/p>\n<p><strong>First of all, the architectural design.<\/strong>        <\/p>\n<p>In order to implement this user story I\u2019m going to call upon two more SOA design patterns for the service architecture \u2013 Service Data Replication and Concurrent Contracts. In post two, we already talked about the \u2018contract-first\u2019 approach so I won\u2019t go into any more detail other than to say that it still applies here. The contract is still a <a href=\"http:\/\/www.soaprinciples.com\/standardized_service_contract.php\" target=\"_blank\">Standardised<\/a> and <a href=\"http:\/\/www.soapatterns.org\/decoupled_contract.php\" target=\"_blank\">Decoupled Contract<\/a>.         <\/p>\n<p><a href=\"http:\/\/soapatterns.org\/service_data_replication.php\" target=\"_blank\">Service Data Replication<\/a> is a pattern that helps you to achieve high levels of service autonomy and availability by creating whole copies of the data required by the service elsewhere on the infrastructure. This copy can then be used instead of the original in order to balance the load on the infrastructure.         <\/p>\n<p>The <a href=\"http:\/\/soapatterns.org\/concurrent_contracts.php\" target=\"_blank\">Concurrent Contracts<\/a> pattern is used when \u2018[an existing] service\u2019s contract may not be suitable for or applicable to all potential service consumers\u2019. For example, when security, protocol or accessibility concerns require that something similar (but not the same) be made available to a specific subset of users (like off-site consumers or mobile devices with restricted processing power or bandwidth).         <\/p>\n<p>In order to implement our new user story, we\u2019ll use both of these patterns together to provide a \u2018read-only\u2019 version of the Product Entity Service. However, by providing a second \u2018read-only\u2019 version of the Product Entity service, you could also say that we are partially implementing the <a href=\"http:\/\/www.soapatterns.org\/redundant_implementation.php\" target=\"_blank\">Redundant Implementation<\/a> SOA pattern, because we\u2019re offering a second redundant option for some of the service\u2019s key operations.         <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>The resulting architecture looks something like this (click to enlarge)\u2026         <\/p>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/1.bp.blogspot.com\/-JWkjm8TyrOI\/UEzBziTNWhI\/AAAAAAAAB7Q\/BASdSr_xuV0\/s1600\/readonly-product-service-diagram1.png\"><img decoding=\"async\" border=\"0\" height=\"171\" src=\"http:\/\/1.bp.blogspot.com\/-JWkjm8TyrOI\/UEzBziTNWhI\/AAAAAAAAB7Q\/BASdSr_xuV0\/s320\/readonly-product-service-diagram1.png\" width=\"320\" \/><\/a><\/div>\n<p><strong>The service contract.<\/strong>        <\/p>\n<p>The original <a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_8619.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 2: Contract-first\">Product Entity Service<\/a> offered five operations \u2013 <i>Get, Find, Create, Update and Delete <\/i>but offering all these capabilities to outsiders is not necessary and would probably be quite problematic (in terms of security, integrity, etc.). We certainly don\u2019t want any external users creating or updating our product information without our permission.         <\/p>\n<p>Therefore, in our web service contract for the new \u2018<i>Read-only Product Entity Service<\/i>\u2018 I\u2019ve removed the <i>Create<\/i>, <i>Update<\/i> and <i>Delete<\/i> operations completely and only provided <i>Get<\/i> and <i>Find<\/i>. All the datatypes remain the same (the same Product.xsd describes the product entity etc.). Keeping the datatypes the same is important because I\u2019m deliberately applying the <a href=\"http:\/\/soapatterns.org\/canonical_schema.php\" target=\"_blank\">Canonical Schema<\/a> and <a href=\"http:\/\/soapatterns.org\/schema_centralization.php\" target=\"_blank\">Schema Centralisation<\/a> patterns and utililising the <a href=\"http:\/\/soaprinciples.com\/standardized_service_contract.php\" target=\"_blank\">Standardised Service Contract<\/a> principal in order to avoid transformation.         <\/p>\n<p><strong>The Java code.<\/strong>        <\/p>\n<p>With this new read-only service I\u2019m still working contract first, so I\u2019ve created a new <a href=\"http:\/\/maven.apache.org\/\" target=\"_blank\">Maven <\/a>project who\u2019s first task during a build is to import the Read-only Product Entity Service\u2019s WSDL contact and create from it a set of JAX-WS  service interfaces and data objects.         <\/p>\n<p>From this point on, I can reuse some of the code that I\u2019ve developed already for the \u2018full\u2019 Product Entity Service. By refactoring my previous codebase into modules, I can even get Maven to treat the original code as a dependency for this new service. In essence, the bits that I\u2019m interested in are the EJB\u2019s and DAO\u2019s I created for the business and persistence logic of the <i>Get<\/i> and <i>Find<\/i> operations.         <\/p>\n<p>By reusing the existing code and by creating a <a href=\"http:\/\/benwilcock.wordpress.com\/2012\/07\/24\/commissioning-glassfish-3-application-servers-on-aws-ec2\/\" target=\"_blank\" title=\"Commissioning Glassfish 3 application servers on AWS EC2\">Glassfish server on the Amazon cloud<\/a>, I can stand-up the new service in record quick time and be halfway to completing the user story. All I need now is some replicated Product data to work with\u2026         <\/p>\n<p><strong>Starting the data replication.<\/strong>        <\/p>\n<p>Couch DB offers a fantastic enterprise class replication system out of the box and for free. This makes implementing the <a href=\"http:\/\/www.soapatterns.org\/service_data_replication.php\" target=\"_blank\">Service Data Replication SOA pattern<\/a> very easy.         <\/p>\n<p>Couch DB\u2019s built in data replicator can replicate whole databases of documents between any two CouchDb instances that are available on the network or over the web. In this case I\u2019ve created a CouchDb database at a hosted provider called <a href=\"http:\/\/www.iriscouch.com\/\" target=\"_blank\">IrisCouch<\/a>. They can provide me with secured CouchDB instances or various sizes at the drop of a hat and will look after all the necessary infrastructure and backup requirements. For small users they even do this free.         <\/p>\n<p>In order to setup a replication I just need to use the CURL command-line tool to issue specific instructions via HTTP to my local CouchDB instance. These instructions tells my local CouchDB service to replicate my Product data with my remote CouchDB database on <a href=\"http:\/\/www.iriscouch.com\/\" target=\"_blank\">IrisCouch<\/a> over the web.         <\/p>\n<p>The database replication instruction is a JSON document and looks something like this\u2026         <\/p>\n<pre class=\"brush:java\">{'source':'products',\r\n 'target':'https:\/\/username:password@instance.iriscouch.com:6984\/products',\r\n 'create_target':true,\r\n 'continuous':true}<\/pre>\n<p>In essence this JSON instruction says \u201c<i>replicate the local Products database documents to the remote iriscouch instance, forever<\/i>\u201c. Immediately on issuing the command, CouchDB sets to work and starts replicating my local data to my remote database instance. This includes updates and deletes and any \u2018design documents\u2019 stored in the Products database. This replica of Products is then immediately available to my Read-only Product Entity Service which is hosted in the Amazon EC2 cloud.         <\/p>\n<p>From this point onwards, service consumers using the Get or Find operations on this service will see a replica of the data that is used in-house. The information will be kept up to date by the replication.         <\/p>\n<p><strong>Finally, the user acceptance test.<\/strong>        <\/p>\n<p>So how well did we do against our new user story\u2019s requirements?         <\/p>\n<p>By hosting the read-only version of the Product Entity Service on the Amazon cloud, we\u2019ve created an off site web-service that that is highly available. The data it provides is an exact replica of the data we use on-site with only the smallest amount of latency between the two copies under normal conditions.         <\/p>\n<p>If my on-site network goes down, the read-only cloud based version of the Product Entity Service will carry on regardless, and because we\u2019re using the Amazon cloud infrastructure it can benefit from almost unlimited runtime resources if necessary. Availability shouldn\u2019t ever be a problem. We can add more machines at any time, and offer load balancing and potentially spread machines over multiple continents if necessary.         <\/p>\n<p>My guess is that the Sales Director will be pleased that our customers can always see the information in our product catalogue and customers themselves should be be pretty satisfied with the comprehensive and reliable service that they now receive. Finally, the IT Manager will be pleased that network security remains intact and that the new off-site hosted service will cost next to nothing to run and be very reliable.         <\/p>\n<p>All that remains is to publicise the Read-only Product Entity Service endpoint to our customers and support them in their use of it. All in all a pretty successful day at the office.         <\/p>\n<p><strong>Would you like to try the Read-only Product Service for yourself?<\/strong>        <\/p>\n<p>The endpoint details can be found in the SOA Growers <a href=\"http:\/\/www.soagrowers.com\/simpleservicerepository\" title=\"SOAGrowers Simple Service Repository\">Simple Service Repository<\/a>. Follow the \u2018Service Repository\u2019 link and look for the <strong>\u2018R20121231? <\/strong>release. In there you fill find links to the service\u2019s WSDL, WS-I certificate and link to a live demo web-service endpoint hosted on an AWS micro-instance.         <\/p>\n<p>The best way to experience the live demo is to download the SOAP-UI test suite. This test suite requires <a href=\"http:\/\/www.soapui.org\/\" target=\"_blank\">SOAP-UI<\/a> v4 (which can be downloaded for free). The test suite contains a simple test of all the operations available on the service.         <\/p>\n<p><strong>Catch-up with the entire blog series online\u2026<\/strong>        <\/p>\n<p>That\u2019s probably the last in this series on building entity services with Java and CouchDB. If you missed any of the earlier blog posts in this series and you would like to catch up, the other entries are listed below\u2026         <\/p>\n<ul>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_10.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 1: Outline\">Implementing Entity Services using NoSQL \u2013 Part 1: Outline<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_8619.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 2: Contract-first\">Implementing Entity Services using NoSQL \u2013 Part 2: Contract-first<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_6090.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 3: CouchDB\">Implementing Entity Services using NoSQL \u2013 Part 3: CouchDB<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using_389.html\" title=\"Implementing Entity Services using NoSQL \u2013 Part 4: Java EE\">Implementing Entity Services using NoSQL \u2013 Part 4: JavaEE<\/a><\/li>\n<\/ul>\n<div>\n<\/div>\n<div>Don&#8217;t forget to share!<\/div>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/benwilcock.wordpress.com\/2012\/08\/23\/implementing-entity-services-using-nosql-part-5-improving-autonomy-using-the-cloud\/\">Implementing Entity Services using NoSQL \u2013 Part 5: Improving autonomy using the Cloud<\/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>In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and the CouchDB NoSQL database. In this final post in the series I\u2019m going to leverage some of the technical assets that I\u2019ve created and implement some new &hellip;<\/p>\n","protected":false},"author":268,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[210,113,433,106],"class_list":["post-1846","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-cloud","tag-nosql","tag-soa","tag-web-services"],"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 5: Improving autonomy using the Cloud - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and\" \/>\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.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 5: Improving autonomy using the Cloud - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.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:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\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=\"8 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.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html\"},\"author\":{\"name\":\"Ben Wilcock\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/2d350b077826f7d46a210509a397f080\"},\"headline\":\"Implementing Entity Services using NoSQL &#8211; Part 5: Improving autonomy using the Cloud\",\"datePublished\":\"2012-09-10T10:00:00+00:00\",\"dateModified\":\"2012-10-22T06:57:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html\"},\"wordCount\":1590,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"Cloud\",\"NoSQL\",\"SOA\",\"Web Services\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html\",\"name\":\"Implementing Entity Services using NoSQL - Part 5: Improving autonomy using the Cloud - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2012-09-10T10:00:00+00:00\",\"dateModified\":\"2012-10-22T06:57:04+00:00\",\"description\":\"In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/implementing-entity-services-using.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 5: Improving autonomy using the Cloud\"}]},{\"@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 5: Improving autonomy using the Cloud - Java Code Geeks","description":"In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and","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.html","og_locale":"en_US","og_type":"article","og_title":"Implementing Entity Services using NoSQL - Part 5: Improving autonomy using the Cloud - Java Code Geeks","og_description":"In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and","og_url":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.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:04+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-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":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html"},"author":{"name":"Ben Wilcock","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/2d350b077826f7d46a210509a397f080"},"headline":"Implementing Entity Services using NoSQL &#8211; Part 5: Improving autonomy using the Cloud","datePublished":"2012-09-10T10:00:00+00:00","dateModified":"2012-10-22T06:57:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html"},"wordCount":1590,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["Cloud","NoSQL","SOA","Web Services"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html","url":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html","name":"Implementing Entity Services using NoSQL - Part 5: Improving autonomy using the Cloud - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2012-09-10T10:00:00+00:00","dateModified":"2012-10-22T06:57:04+00:00","description":"In the previous posts I discussed how I went about building my SOA \u2018Entity\u2019 service for Products by using a combination of Java Web Services, Java EE and","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/implementing-entity-services-using.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 5: Improving autonomy using the Cloud"}]},{"@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\/1846","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=1846"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}