{"id":1965,"date":"2015-10-19T07:33:06","date_gmt":"2015-10-19T07:33:06","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1965"},"modified":"2024-09-12T01:02:46","modified_gmt":"2024-09-12T08:02:46","slug":"javasdk-2-2-ga","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/","title":{"rendered":"Announcing Java SDK 2.2 General Availability"},"content":{"rendered":"<p>On behalf of the SDK Team, it is my great pleasure to announce that the Java SDK version <code>2.2<\/code> is now GA!<\/p>\n<p>This version is packed with enhancements and bugfixes. First and foremost it offers compatibility with all the new shiny things our new <a href=\"https:\/\/www.couchbase.com\/forums\/t\/couchbase-server-4-0-is-now-ga\/5374\/\"><code>Couchbase Server 4.0<\/code><\/a> brings to the table.<\/p>\n<p>Thanks to feedback and after quite a few iterations (there were not <a href=\"https:\/\/www.couchbase.com\/blog\/javasdk-2.2-dp\/\">one<\/a> but <a href=\"https:\/\/www.couchbase.com\/blog\/java-sdk-2.2.0-developer-preview-refresh\/\">two<\/a> Developer Previews for this release!), we now have a rich set of improvements to take advantage of when migrating from <code>2.0<\/code>\/<code>2.1<\/code> to <code>2.2<\/code>.<\/p>\n<p>See the <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/sdks\/java-2.2\/release-notes.html\">release notes<\/a> for a complete list of changes, but here is a recap:<\/p>\n<ul>\n<li>Switched from hot observables to <a href=\"#cold\">cold ones<\/a><\/li>\n<li>Extended support for <a href=\"#mds\">N1QL and Multi-Dimensional Scaling<\/a> (MDS)<\/li>\n<li><a href=\"#durability\">Enhanced durability<\/a> support<\/li>\n<li>Supportability enhancements with <a href=\"#metrics\">metrics<\/a><\/li>\n<li>Simple <a href=\"#odm\">ODM<\/a><\/li>\n<li>Sync and Async <a href=\"#api\">API enhancements<\/a><\/li>\n<li><a href=\"#misc\">Misc<\/a> (naming changes, dependency upgrades)<\/li>\n<\/ul>\n<p>To get your hands on this release, simply update your <code>pom.xml<\/code> (or download the <a href=\"https:\/\/packages.couchbase.com\/clients\/java\/2.2.0\/Couchbase-Java-Client-2.2.0.zip\" target=\"_blank\" rel=\"noopener noreferrer\">archive<\/a>):<\/p>\n<pre><code>\r\n    \r\n        com.couchbase.client\r\n        java-client\r\n        2.2.0\r\n    \r\n\r\n<\/code><\/pre>\n<p>You can also peruse the <a href=\"https:\/\/docs.couchbase.com\/sdk-api\/couchbase-java-client-2.2.0\/\">javadocs<\/a> and <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/sdks\/java-2.2\/java-intro.html\">SDK documentation<\/a> for this release.<\/p>\n<h2>New Features<\/h2>\n<h3><a id=\"mds\" name=\"mds\"><\/a>N1QL &amp; MDS Support<\/h3>\n<p>The SDK has been tuned to seamlessly work with <code>Couchbase Server 4.0<\/code>:<\/p>\n<ul>\n<li>Explore a full DSL to work with N1QL and perform SELECT as well as work with indexes.<\/li>\n<li>Let the SDK and the query service optimize queries you run often by using the <code>adhoc(false)<\/code> tuning of <code>N1qlParams<\/code> in you <code>N1qlQuery<\/code>.<\/li>\n<li>Rely on the SDK to be aware of your <code>MDS<\/code> cluster (<code>Multi Dimensional Scaling<\/code>, the possibility for nodes to have different services enabled, allowing you to scale nodes up according to their need, eg. more RAM for data nodes, more CPU for query nodes).<\/li>\n<\/ul>\n<p><strong>About query optimization<\/strong>: this is a replacement of the initial <code>prepare<\/code> API in developer previews. No need to hold on to a <code>PreparedPayload<\/code> or <code>QueryPlan<\/code>. Marking a query for optimization using <code>N1qlParams<\/code>&#8216;s <code>adhoc(false)<\/code>\u00a0method will internally use prepared statement feature of the query engine, caching up to 5000 execution plans for faster execution.<\/p>\n<h3><a id=\"durability\" name=\"durability\"><\/a>Enhanced Durability<\/h3>\n<p>Another possibility introduced in <code>Couchbase Server 4.0<\/code> is enhanced durability. The idea is that rather than using CAS to check correct persistence and replication of your data, a finer grained <code>MutationToken<\/code> can be emitted by the server with each mutation and used for durability observation.<\/p>\n<p>It allows to ensure a specific mutation has been seen on a replica even if a newer mutation is made in the meantime (changing yet again the CAS on the master and replica). It also allows for more correct state detection if a hard failover has been triggered in the cluster.<\/p>\n<p>To activate this feature on the <code>CouchbaseEnvironment<\/code> use the <code>mutationTokensEnabled(true)<\/code> method.<\/p>\n<p><strong>Note<\/strong> This implies that additional bytes are sent by the server on each mutation response, so it comes with a slight overhead and therefore is turned off by default.<\/p>\n<h3><a id=\"metrics\" name=\"metrics\"><\/a>Metrics<\/h3>\n<p>What is going on inside the SDK? What is the health of my JVM? Are those latencies due to network round trips or are they occuring in the SDK?<\/p>\n<p>All these questions and more find answers through the new Metrics feature!<\/p>\n<p><code>Runtime<\/code> and <code>Latency<\/code> metrics are collected all the time, and are regularly dumped to the <code>EventBus<\/code> (an <code>Observable<\/code> itself), by default every hour. Additionaly to changing the interval for the dump, one can easily configure a consumer for these metric events that logs them.<\/p>\n<p>Have a look at the documentation to discover all the nitty gritty details of it :)<\/p>\n<h3><a id=\"odm\" name=\"odm\"><\/a>Simple ODM with Repository API<\/h3>\n<p>We are exploring ODM (<code>Object-Document Mapping<\/code>) in the form of a <code>Repository<\/code> interface that allows to store Entity classes directly, provided they are simple enough (eg. for now it needs an empty constructor) and annotated with <code>@Document<\/code>, <code>@Id<\/code> and <code>@Field<\/code>.<\/p>\n<h2><a id=\"cold\" name=\"cold\"><\/a>From Hot Observable to Cold Ones<\/h2>\n<p>This is a major change to the behavior of the <code>async<\/code> API. In <code>RxJava<\/code>, a <strong>hot<\/strong> <code>Observable<\/code> will emit data wether or not someone is listening\/subscribing, and will always serve the same data to new subscribers.<\/p>\n<p>This was the behavior of Couchbase SDK Observables previously. This meant that if you <strong>needed<\/strong> new subscriptions to trigger a new operation on the database (<em>for example in the context of <code>retry<\/code><\/em>), you had to wrap your call in a <code>Observable.defer()<\/code>.<\/p>\n<p>Otherwise all retries would see the same first result, for example a <code>TemporaryFailureException<\/code>.<\/p>\n<p>From <code>2.2<\/code> onwards, the default behavior is to have <strong>cold<\/strong> <code>Observable<\/code>s, meaning that the wrapping in <code>defer<\/code> is now redundant. All SDK calls will seamlessly work with <code>RxJava<\/code>&#8216;s <code>retry<\/code> semantics.<\/p>\n<p>Unless you explicitely <code>subscribe()<\/code> to an <code>Observable<\/code> returned by the SDK, no db interaction is triggered. This is a lazier &#8220;do nothing until needed&#8221; approach that is also beneficial while declaring fallback streams (like with <code>Observable#onErrorResumeNext()<\/code>).<\/p>\n<h2><a id=\"api\" name=\"api\"><\/a>API Improvements<\/h2>\n<h3><code>getFromReplica<\/code> iteration<\/h3>\n<p>In the sync API, there is now an overload of <code>getFromReplica<\/code> that returns an <code>Iterator<\/code>, allowing for easy consumption of only part of the responses (eg. when only interested in the fastest response).<\/p>\n<h3><code>includeDocs<\/code> in <code>ViewQuery<\/code><\/h3>\n<p>Still in the sync API, if you want your <code>ViewQuery<\/code> to efficiently retrieve the whole content of the documents in the background, you can now use the <code>includeDocs<\/code> option.<\/p>\n<h3>Counter Semantics<\/h3>\n<p>Previously, <code>counter<\/code> method would initialize the counter document with the default value of 0 if no <code>initialValue<\/code> was provided in the overload.<\/p>\n<p>This has been changed so that instead, a <code>DocumentDoesNotExistException<\/code> is thrown with these kind of overloads (like in the 1.4 SDK generation). To initialize with 0 instead of erroring, simply use one of the overloads that accept an <code>initialValue<\/code>.<\/p>\n<h3>Durability Requirement Support for <code>counter<\/code>, <code>append<\/code> and <code>prepend<\/code><\/h3>\n<p>Previously no overload would allow to set a <code>PersistTo<\/code> and\/or <code>ReplicateTo<\/code> durability requirement. This has now been implemented.<\/p>\n<h3><code>CASMismatchException<\/code> instead of <code>CouchbaseException<\/code> for <code>append<\/code> and <code>prepend<\/code><\/h3>\n<p>As the title implies, where both methods would just return a generic <code>CouchbaseException<\/code><\/p>\n<h3>Design Document Options<\/h3>\n<p>You can now specify different options on a per design document basis when creating or replacing one.<\/p>\n<h3>CouchbaseEnvironment: Avoiding Confusion<\/h3>\n<p>The <code>CouchbaseEnvironment.Builder<\/code> doesn&#8217;t implement the interface anymore, forcing you to call <code>build()<\/code> to obtain the actual environment (and thus avoiding confusing <code>NullPointerException<\/code> during usage).<\/p>\n<h2><a id=\"misc\" name=\"misc\"><\/a>Misc<\/h2>\n<h3>Name Changes<\/h3>\n<p>Some classes related to <code>N1QL<\/code> have been renamed to avoid confusion and better align with other similar classes and\/or other SDKs:<\/p>\n<ul>\n<li>Most <code>Query<\/code> related classes have been prefixed with <code>N1QL<\/code> (eg. <code>AsyncQueryResult<\/code> becomes <code>AsyncN1qlQueryResult<\/code>). This is more consistent with the naming eg. for views (<code>ViewQuery<\/code>, <code>N1qlQuery<\/code>).<\/li>\n<li><code>QueryParams<\/code> becomes <code>N1qlParams<\/code> and <code>QueryMetrics<\/code> becomes <code>N1qlMetrics<\/code>.<\/li>\n<li>The various instances of the word <code>parametrized<\/code> have been replaced with <code>parameterized<\/code> across documentation and the SDKs. For example in <code>N1qlQuery.parameterized(Statement st, JsonObject paramValues)<\/code> factory method&#8230;<\/li>\n<\/ul>\n<h3>Dependency Upgrades<\/h3>\n<p>The following external dependency had been updated:<\/p>\n<ul>\n<li><code>RxJava<\/code> from <code>1.0.4<\/code> to <strong><code>1.0.14<\/code><\/strong><\/li>\n<\/ul>\n<p>Additionaly, internal dependencies have also been updated:<\/p>\n<ul>\n<li><code>Netty<\/code> from <code>4.0.25.Final<\/code> to <strong><code>4.0.30.Final<\/code><\/strong><\/li>\n<li><code>LMAX Disruptor<\/code> <code>3.3.0<\/code> to <strong><code>3.3.2<\/code><\/strong><\/li>\n<li><code>Jackson<\/code> from <code>2.4.2<\/code> to <strong><code>2.6.1<\/code><\/strong><\/li>\n<li><code>LatencyUtils<\/code> new in version <strong><code>2.0.2<\/code><\/strong><\/li>\n<\/ul>\n<h2>We hope you enjoy this release, Happy Coding!<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>On behalf of the SDK Team, it is my great pleasure to announce that the Java SDK version 2.2 is now GA! This version is packed with enhancements and bugfixes. First and foremost it offers compatibility with all the new [&hellip;]<\/p>\n","protected":false},"author":48,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[9022],"class_list":["post-1965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Announcing Java SDK 2.2 General Availability - 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\/javasdk-2-2-ga\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Announcing Java SDK 2.2 General Availability\" \/>\n<meta property=\"og:description\" content=\"On behalf of the SDK Team, it is my great pleasure to announce that the Java SDK version 2.2 is now GA! This version is packed with enhancements and bugfixes. First and foremost it offers compatibility with all the new [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-10-19T07:33:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T08:02:46+00:00\" \/>\n<meta name=\"author\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/\"},\"author\":{\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\"},\"headline\":\"Announcing Java SDK 2.2 General Availability\",\"datePublished\":\"2015-10-19T07:33:06+00:00\",\"dateModified\":\"2024-09-12T08:02:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/\"},\"wordCount\":1025,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/\",\"name\":\"Announcing Java SDK 2.2 General Availability - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-10-19T07:33:06+00:00\",\"dateModified\":\"2024-09-12T08:02:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#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\/javasdk-2-2-ga\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Announcing Java SDK 2.2 General Availability\"}]},{\"@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\/a4086d75b59570cc2e5ff66d98c5d1a1\",\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"caption\":\"Simon Basle, Software Engineer, Pivotal\"},\"description\":\"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/simon-basle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Announcing Java SDK 2.2 General Availability - 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\/javasdk-2-2-ga\/","og_locale":"en_US","og_type":"article","og_title":"Announcing Java SDK 2.2 General Availability","og_description":"On behalf of the SDK Team, it is my great pleasure to announce that the Java SDK version 2.2 is now GA! This version is packed with enhancements and bugfixes. First and foremost it offers compatibility with all the new [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-10-19T07:33:06+00:00","article_modified_time":"2024-09-12T08:02:46+00:00","author":"Simon Basle, Software Engineer, Pivotal","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon Basle, Software Engineer, Pivotal","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/"},"author":{"name":"Simon Basle, Software Engineer, Pivotal","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1"},"headline":"Announcing Java SDK 2.2 General Availability","datePublished":"2015-10-19T07:33:06+00:00","dateModified":"2024-09-12T08:02:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/"},"wordCount":1025,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/","url":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/","name":"Announcing Java SDK 2.2 General Availability - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-10-19T07:33:06+00:00","dateModified":"2024-09-12T08:02:46+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-ga\/#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\/javasdk-2-2-ga\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Announcing Java SDK 2.2 General Availability"}]},{"@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\/a4086d75b59570cc2e5ff66d98c5d1a1","name":"Simon Basle, Software Engineer, Pivotal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854","url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","caption":"Simon Basle, Software Engineer, Pivotal"},"description":"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com.","url":"https:\/\/www.couchbase.com\/blog\/author\/simon-basle\/"}]}},"authors":[{"term_id":9022,"user_id":48,"is_guest":0,"slug":"simon-basle","display_name":"Simon Basle, Software Engineer, Pivotal","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","author_category":"","last_name":"Basle","first_name":"Simon","job_title":"","user_url":"","description":"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1965","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\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=1965"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1965\/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=1965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1965"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}