{"id":2310,"date":"2016-06-27T08:14:13","date_gmt":"2016-06-27T08:14:12","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2310"},"modified":"2023-09-22T09:42:00","modified_gmt":"2023-09-22T16:42:00","slug":"using-spring-data-couchbase-in-a-cdi-application","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/","title":{"rendered":"Using Spring Data Couchbase in a CDI Application"},"content":{"rendered":"<p>If you are in the JEE space and want a modern data management layer for your <a href=\"https:\/\/www.couchbase.com\/blog\/10-common-nosql-use-cases-for-modern-applications\/\">NoSql applications<\/a>, you might find yourself quickly limited. There are some interesting projects like <a href=\"https:\/\/hibernate.org\/ogm\/\">Hibernate OGM<\/a> or <a href=\"https:\/\/deltaspike.apache.org\/\">Deltaspike<\/a>&#8216;s Data module but none of them support Couchbase and are as advanced as Spring Data.<\/p>\n<p>But everything is fine because Spring Data projects have CDI extensions. Which means you can use them in JEE containers. Bringing another DI framework like Spring does bring some overhead as CDI is already here, but it&#8217;s worth the overhead when you get all the goodness that comes from Spring Data.<\/p>\n<p>So let&#8217;s see how this work. I will use the hibernate5 example available in the wildfly quickstart guides and replace Hibernate Core by <a href=\"https:\/\/docs.couchbase.com\/sdk-extensions\/spring-data-couchbase.html\">Spring Data Couchbase<\/a>. Original code can be found <a href=\"https:\/\/github.com\/wildfly\/quickstart\/tree\/10.x\/hibernate5\/\">here<\/a> and final migrated code <a href=\"https:\/\/github.com\/ldoguin\/wildfly-quickstart-spring-data\">here<\/a>.<\/p>\n<h2>Connect to Couchbase with CDI<\/h2>\n<p>The first thing you will want to setup is a connection to a Couchbase cluster. Since you are using CDI, you can create a @Producer. I won&#8217;t go into details on how you can externalise properties for the IP adress, bucket name, admin login and password. I will use defaults. If you don&#8217;t provide any adress or bucket name, the SDK assumes you have Couchbase Server running on localhost with a bucket called default.<\/p>\n<pre><code>  @Produces\r\n  public CouchbaseOperations createCouchbaseTemplate() throws UnknownHostException, CouchbaseException {\r\n      CouchbaseCluster cluster = CouchbaseCluster.create();\r\n      Bucket bucket = cluster.openBucket();\r\n      ClusterInfo clusterInfo = cluster.clusterManager(\"default\",\"\").info();\r\n      return new CouchbaseTemplate(clusterInfo, bucket);\r\n  }\r\n<\/code><\/pre>\n<p>This should give you everything you need to have working Couchbase repositories. Be aware though that there is a bug in latest version of <a href=\"https:\/\/issues.jboss.org\/browse\/WELD-2185\">Weld<\/a>. So you might run into troubles. A quick fix can be found <a href=\"https:\/\/github.com\/ldoguin\/wildfly-quickstart-spring-data\/blob\/master\/src\/main\/java\/org\/springframework\/data\/couchbase\/repository\/cdi\/CouchbaseRepositoryExtension.java\">here<\/a>. Basically the problem is that Weld changed the way they store qualifiers, wich is not compatible anymore with the Bean lookup method(based on qualifiers). So I fixed it temporarily by changing the way annotations are processed in the CDI extension directly. Sample code looks like this:<\/p>\n<pre><code>   void processBean(@Observes ProcessBean processBean) {\r\n      Bean bean = processBean.getBean();\r\n      for (Type type : bean.getTypes()) {\r\n          if (type instanceof Class&lt;?&gt; &amp;&amp; CouchbaseOperations.class.isAssignableFrom((Class&lt;?&gt;) type)) {\r\n              Set qualifiers = bean.getQualifiers().stream()\r\n                      .sorted((e1, e2) -&gt; Integer.compare(e1.hashCode(),\r\n                              e2.hashCode())).collect(Collectors.toSet());\r\n              couchbaseOperationsMap.put(qualifiers, ((Bean) bean));\r\n          }\r\n      }\r\n  }\r\n<\/code><\/pre>\n<p>You are most likely to encounter this bug if you use Wildfly 10 or Jboss EAP 7.<\/p>\n<h2>Integrate the Spring Repository<\/h2>\n<p>Once you have your producer for the CouchbaseOperations class, you can start creating repositories. You don&#8217;t have to implement anything, which is part of the beauty in Spring Data. You just create an interface extending the <em>CouchbasePagingAndSortingRepository<\/em> interface, specifying the Entity class you want to manage as well as the type of the key. In the exemple it&#8217;s . Which means the repository stores Members entities using a <em>Long<\/em> as key.<\/p>\n<p>I will just add a method called findAll that takes a <em>Sort<\/em> object as parameter.<\/p>\n<pre><code>public interface MemberRepository extends CouchbasePagingAndSortingRepository {\r\n  Iterable findAll(Sort sort);\r\n}\r\n<\/code><\/pre>\n<p>This requires a change in the <em>MemberListProducer<\/em> to use that particular method. A <em>Sort<\/em> object lets you define the <em>Sort<\/em> direction as well as the fields to use for the <em>Sort<\/em>.<\/p>\n<pre><code>@PostConstruct\r\npublic void retrieveAllMembersOrderedByName() {\r\n    members = memberRepository.findAll(new Sort(Sort.Direction.ASC, \"name\"));\r\n}\r\n<\/code><\/pre>\n<p>Now you should be ready to deploy that project to your JEE container. If you use Wildfly and the code in this <a href=\"https:\/\/github.com\/ldoguin\/wildfly-quickstart-spring-data\">github repository<\/a>, you can run <code>mvn wildfly:deploy<\/code> and go to the following URL: https:\/\/localhost:8080\/wildfly-springdata.<\/p>\n<p>Please let us know if you encounter any issues or have any suggestions in the\u00a0comment section\u00a0bellow!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you are in the JEE space and want a modern data management layer for your NoSql applications, you might find yourself quickly limited. There are some interesting projects like Hibernate OGM or Deltaspike&#8216;s Data module but none of them [&hellip;]<\/p>\n","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1818],"tags":[],"ppma_author":[9023],"class_list":["post-2310","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using Spring Data Couchbase in a CDI Application - The Couchbase Blog<\/title>\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.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Spring Data Couchbase in a CDI Application\" \/>\n<meta property=\"og:description\" content=\"If you are in the JEE space and want a modern data management layer for your NoSql applications, you might find yourself quickly limited. There are some interesting projects like Hibernate OGM or Deltaspike&#8216;s Data module but none of them [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-27T08:14:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-22T16:42:00+00:00\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Using Spring Data Couchbase in a CDI Application\",\"datePublished\":\"2016-06-27T08:14:12+00:00\",\"dateModified\":\"2023-09-22T16:42:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\"},\"wordCount\":505,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\",\"name\":\"Using Spring Data Couchbase in a CDI Application - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-06-27T08:14:12+00:00\",\"dateModified\":\"2023-09-22T16:42:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Spring Data Couchbase in a CDI Application\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using Spring Data Couchbase in a CDI Application - The Couchbase Blog","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.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/","og_locale":"en_US","og_type":"article","og_title":"Using Spring Data Couchbase in a CDI Application","og_description":"If you are in the JEE space and want a modern data management layer for your NoSql applications, you might find yourself quickly limited. There are some interesting projects like Hibernate OGM or Deltaspike&#8216;s Data module but none of them [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-06-27T08:14:12+00:00","article_modified_time":"2023-09-22T16:42:00+00:00","author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Using Spring Data Couchbase in a CDI Application","datePublished":"2016-06-27T08:14:12+00:00","dateModified":"2023-09-22T16:42:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/"},"wordCount":505,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/","url":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/","name":"Using Spring Data Couchbase in a CDI Application - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-06-27T08:14:12+00:00","dateModified":"2023-09-22T16:42:00+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/using-spring-data-couchbase-in-a-cdi-application\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Spring Data Couchbase in a CDI Application"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2310"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2310\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2310"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}