{"id":1924,"date":"2015-04-30T08:02:50","date_gmt":"2015-04-30T08:02:50","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1924"},"modified":"2025-10-09T07:18:47","modified_gmt":"2025-10-09T14:18:47","slug":"javasdk-2-2-dp","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/javasdk-2-2-dp\/","title":{"rendered":"Couchbase Java SDK 2.2 Developer Preview 1"},"content":{"rendered":"<p>Em nome da equipe do SDK, tenho o prazer de apresentar a pr\u00f3xima grande vers\u00e3o do Java SDK, o <strong>Vers\u00e3o 2.2<\/strong>. A equipe tem trabalhado arduamente para trazer a voc\u00ea novos recursos incr\u00edveis, e hoje achamos que \u00e9 hora de lan\u00e7ar alguma luz sobre eles com o lan\u00e7amento da primeira visualiza\u00e7\u00e3o para desenvolvedores.<\/p>\n<p>2.2 traz uma s\u00e9rie de novos recursos:<\/p>\n<ul>\n<li>Aprimorado <a href=\"#n1ql\">N1QL<\/a> suporte<\/li>\n<li>Simples <a href=\"#odm\">Mapeamento de entidades<\/a><\/li>\n<li>V\u00e1rias APIs <a href=\"#enhancement\">aprimoramentos<\/a><\/li>\n<li>Classes auxiliares para simplifica\u00e7\u00e3o <a href=\"#retry\">tentar novamente<\/a> manuseio<\/li>\n<li>Vers\u00e3o de sali\u00eancias de <a href=\"#dependencies\">algumas depend\u00eancias<\/a><\/li>\n<\/ul>\n<p>Ir para o <a href=\"#conclusion\">conclus\u00e3o<\/a> se n\u00e3o puder esperar para colocar suas m\u00e3os no c\u00f3digo :)<\/p>\n<h2>Altera\u00e7\u00f5es relacionadas ao N1QL<a id=\"n1ql\"><\/a><\/h2>\n<p>Recentemente, foi lan\u00e7ado o Couchbase Server v4.0 Developer Preview. Entre os v\u00e1rios recursos dessa nova vers\u00e3o, a integra\u00e7\u00e3o de nossa nova linguagem de consulta \"SQL for Documents\" (codinome <code>N1QL<\/code>) \u00e9 um dos principais.<\/p>\n<p>Nas vers\u00f5es anteriores do Java SDK, j\u00e1 t\u00ednhamos suporte para o N1QL (especialmente para a 4\u00aa Developer Preview separada que foi lan\u00e7ada pela equipe de consulta no in\u00edcio deste ano), e continuamos dessa forma.<\/p>\n<p>Desde a N1QL DP4, temos <strong>ampliou a DSL<\/strong>, adicionou uma DSL para <strong>gerenciamento de \u00edndices<\/strong> e acrescentou <strong>suporte a senhas de balde<\/strong>.<\/p>\n<h3>Extens\u00e3o DSL<\/h3>\n<p>V\u00e1rias partes da DSL foram ampliadas e aprimoradas. Fizemos com que todo o <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/\">Tutorial N1QL<\/a> pode ser implementado por meio do Java DSL.<\/p>\n<p>O <code>DE<\/code> pode fazer refer\u00eancia a IDs de documentos por meio da cl\u00e1usula <code>USAR CHAVES<\/code> enquanto outras cl\u00e1usulas (como <code>JUNTAR<\/code> ou <code>NEST<\/code>), por outro lado, referem-se a IDs de documentos por meio de <code>SOBRE AS CHAVES<\/code> cl\u00e1usula.<br \/>\nA DSL existente para isso estava apenas produzindo <code>CHAVES<\/code> o que n\u00e3o \u00e9 suficiente, ent\u00e3o ambas as variantes foram reimplementadas como <code>useKeys<\/code>\/<code>useKeysValues<\/code> e <code>onKeys<\/code>\/<code>onKeysValues<\/code> na DSL.<\/p>\n<p>No N1QL, temos o conceito de predicados de cole\u00e7\u00e3o (ou compreens\u00f5es) com os operadores ANY, EVERY, ARRAY e FIRST. Introduzimos uma mini-DSL, <code>Cole\u00e7\u00f5es<\/code>para criar esses predicados e produzir um <code>Express\u00e3o<\/code> que os representa, para ser usado no restante da DSL.<\/p>\n<p>Em alguns casos, o N1QL oferece alternativas de sintaxe e padr\u00f5es. Tr\u00eas deles v\u00eam \u00e0 mente, pois abordamos ambos de forma um pouco diferente:<\/p>\n<ul>\n<li>o <code>AS<\/code> A sintaxe de aliasing pode, \u00e0s vezes, omitir completamente a palavra-chave, como em <code>FROM default AS src<\/code> vs <code>DE src padr\u00e3o<\/code>. Optamos por produzir apenas a forma expl\u00edcita com o <code>AS<\/code> (j\u00e1 que o usu\u00e1rio precisa chamar a palavra-chave <code>as(String alias)<\/code> de qualquer forma).<\/li>\n<li><code>USAR CHAVES<\/code> e <code>SOBRE AS CHAVES<\/code> t\u00eam sintaxe alternativa opcional <code>CHAVES PRIM\u00c1RIAS DE USU\u00c1RIO<\/code> e <code>EM CHAVES PRIM\u00c1RIAS<\/code>. Elas s\u00e3o semanticamente equivalentes e produzimos apenas a primeira forma.<\/li>\n<li><code>ORDER BY<\/code> tem uma dire\u00e7\u00e3o de pedido padr\u00e3o em que n\u00e3o se pede explicitamente <code>DESC<\/code> nem <code>ASC<\/code>. Implementamos essa op\u00e7\u00e3o no <code>Classificar<\/code> com o operador <code>def(Express\u00e3o onWhatToSort)<\/code> m\u00e9todo.<\/li>\n<\/ul>\n<p>Algumas fun\u00e7\u00f5es, algumas das quais foram implementadas anteriormente no <code>Fun\u00e7\u00f5es<\/code> foram adicionados\/movidos para a classe <code>...query.dsl.functions<\/code> em classes auxiliares separadas que correspondam \u00e0 categoria das fun\u00e7\u00f5es dentro delas (por exemplo. <code>StringFunctions<\/code>).<\/p>\n<p>Em <code>Express\u00e3o<\/code>adicionamos alguns m\u00e9todos de f\u00e1brica para construir express\u00f5es a partir de um <code>Declara\u00e7\u00e3o<\/code> (como fazer uma subconsulta) e construir um <code>caminho<\/code>:<\/p>\n<p>Tamb\u00e9m adicionamos operadores aritm\u00e9ticos <code>adicionar<\/code>, <code>subtrair<\/code>, <code>multiplicar<\/code> e <code>dividir<\/code>:<\/p>\n<p>Por fim, adicionamos outro mini-DSL para o <code>CASO<\/code> Declara\u00e7\u00e3o. O CASE pode ser usado para produzir resultados alternativos, dependendo de uma condi\u00e7\u00e3o. Ou a condi\u00e7\u00e3o \u00e9 explicitada em cada alternativa <code>QUANDO<\/code> (a express\u00e3o \u00e9 condicional, e essa forma de CASE \u00e9 chamada de \"caso de pesquisa\"), ou a condi\u00e7\u00e3o \u00e9 apenas igualdade com um identificador\/express\u00e3o fornecido no in\u00edcio do CASE (como <code>CASE user.gender WHEN \"male\" THEN 1<\/code>). Aqui est\u00e1 um exemplo da DSL em a\u00e7\u00e3o:<\/p>\n<h3>Gerenciamento de \u00edndices DSL<\/h3>\n<p>Se voc\u00ea j\u00e1 brincou com o N1QL, sabe que pode criar \u00edndices para acelerar significativamente suas consultas. At\u00e9 agora, a \u00fanica maneira de cri\u00e1-los programaticamente era emitir uma instru\u00e7\u00e3o String bruta. Agora n\u00e3o \u00e9 mais assim!<\/p>\n<p>A DSL de gerenciamento de \u00edndices oferece suporte para as v\u00e1rias opera\u00e7\u00f5es relacionadas aos \u00edndices, a saber<\/p>\n<p>Cria\u00e7\u00e3o de um \u00edndice:<\/p>\n<p>Criando um <em>prim\u00e1rio<\/em> \u00edndice:<\/p>\n<p>Elimina\u00e7\u00e3o de \u00edndices:<\/p>\n<p>Construir \u00edndices que foram adiados na cria\u00e7\u00e3o:<\/p>\n<p>Observe como a maioria dos identificadores (nomes de \u00edndices, espa\u00e7o de nomes\/espa\u00e7o-chave) s\u00e3o automaticamente escapados por backticks.<\/p>\n<h3>Suporte \u00e0 senha do Bucket<\/h3>\n<p>Ao consultar o servi\u00e7o N1QL, agora enriquecemos automaticamente os cabe\u00e7alhos da solicita\u00e7\u00e3o com informa\u00e7\u00f5es de autentica\u00e7\u00e3o obtidas do servi\u00e7o de chamada <code>Balde<\/code>que permite consultar um bucket protegido por senha de forma transparente (como j\u00e1 era o caso do <code>Consulta<\/code>s).<\/p>\n<h2>Mapeamento de entidades<a id=\"odm\"><\/a><\/h2>\n<p>Esse recurso foi muito solicitado no passado: a capacidade de mapear facilmente um objeto de dom\u00ednio para um documento do Couchbase e vice-versa.<\/p>\n<p>Come\u00e7amos a explorar isso <code>Mapeamento de entidades<\/code> (ou <code>ODM<\/code>, <code>Mapeamento de documentos de objeto<\/code>) em 2.2. A abordagem \u00e9 fornecer uma API semelhante a <code>Balde<\/code> dedicada \u00e0 ODM. Essa API \u00e9 descrita na se\u00e7\u00e3o <code>Reposit\u00f3rio<\/code> e \u00e9 poss\u00edvel obter um reposit\u00f3rio de um bucket chamando <code>bucket.repository()<\/code>.<\/p>\n<p>Os m\u00e9todos na API do reposit\u00f3rio lidam com um novo tipo de <code>Documento<\/code>, o <code>EntidadeDocumento<\/code>. Ele se at\u00e9m \u00e0 sem\u00e2ntica do documento que separa os metadados do conte\u00fado (seu objeto de dom\u00ednio, neste caso). Espera-se que o objeto de dom\u00ednio seja anotado (veja abaixo) para que o mapeamento funcione.<\/p>\n<p><code>EntidadeDocumento<\/code> pode ser usado para fornecer explicitamente um <code>id<\/code>para ser usado como chave prim\u00e1ria no Couchbase, mas, ao contr\u00e1rio dos outros <code>Documento<\/code> com as quais voc\u00ea est\u00e1 acostumado, isso \u00e9 opcional. Como alternativa, voc\u00ea pode anotar um <code>Cordas<\/code> em sua classe de dom\u00ednio com <code>@Id<\/code> para us\u00e1-lo como id do documento. <code>@Id<\/code> nunca \u00e9 armazenado no conte\u00fado JSON no Couchbase...<\/p>\n<p>Somente os atributos marcados com o s\u00edmbolo <code>@Campo<\/code> s\u00e3o levadas em considera\u00e7\u00e3o e tornadas parte do conte\u00fado JSON no banco de dados\/injetadas de volta no objeto quando <code>obter<\/code>. Essa anota\u00e7\u00e3o tamb\u00e9m pode conter um alias para o nome do campo:<\/p>\n<p>As limita\u00e7\u00f5es atuais (algumas das quais podem ser suspensas no futuro) s\u00e3o:<\/p>\n<ul>\n<li><code>@Campo<\/code> s\u00f3 \u00e9 suportado em atributos de tipo b\u00e1sico (aqueles que podem ser adicionados a um <code>JsonObject<\/code>) e, em geral, esse ODM \u00e9 para casos simples. O suporte a mapas, listas e conversores personalizados est\u00e1 sendo desenvolvido.<\/li>\n<li>somente classes com construtores de argumento zero s\u00e3o compat\u00edveis com o ODM.<\/li>\n<li>O mapeamento \u00e9 feito por meio de reflex\u00e3o para obter\/definir os valores dos atributos na primeira vez (depois, ele \u00e9 armazenado em cache internamente).<\/li>\n<\/ul>\n<h2>Aprimoramentos na API<a id=\"enhancement\"><\/a><\/h2>\n<p>O existente <code>Balde<\/code> A API recebeu alguns aprimoramentos.<\/p>\n<p>Em primeiro lugar, foi introduzida uma nova opera\u00e7\u00e3o para verificar facilmente a exist\u00eancia de uma chave sem pagar o custo de realmente <code>obter<\/code>o conte\u00fado do documento. Esse \u00e9 o <code>exist(String key)<\/code> m\u00e9todo:<\/p>\n<p>Em segundo lugar, um recurso relacionado a <strong>visualiza\u00e7\u00f5es<\/strong> que estava presente na gera\u00e7\u00e3o 1.x do SDK, mas n\u00e3o na 2.x, \u00e9 a capacidade de solicitar uma obten\u00e7\u00e3o em massa dos documentos ao fazer uma consulta de visualiza\u00e7\u00e3o (a fun\u00e7\u00e3o <code>includeDocs<\/code> op\u00e7\u00e3o).<\/p>\n<p>Isso n\u00e3o \u00e9 realmente dif\u00edcil de fazer na vers\u00e3o 2.x ao usar o <code>ass\u00edncrono<\/code> API (usando o <a href=\"\">padr\u00e3o em massa<\/a> que se baseia no RxJava), mas n\u00e3o existe quando se usa a API de sincroniza\u00e7\u00e3o. De fato, a \u00fanica maneira de obter o documento correspondente de cada linha no modo de sincroniza\u00e7\u00e3o \u00e9 chamar <code>row.document()<\/code>que bloquear\u00e1 e disparar\u00e1 uma solicita\u00e7\u00e3o por linha, em s\u00e9rie. Isso \u00e9 muito ineficiente!<\/p>\n<p>Portanto, reintroduzimos o <code>includeDocs<\/code> na API de consulta de exibi\u00e7\u00e3o. Isso acionar\u00e1 o carregamento ass\u00edncrono eficiente do documento de cada linha em segundo plano, do qual a API de bloqueio tamb\u00e9m se beneficia (as linhas j\u00e1 ter\u00e3o o <code>Documento<\/code> armazenado em cache ao chamar <code>document()<\/code> nelas). Voc\u00ea tamb\u00e9m pode us\u00e1-lo na API ass\u00edncrona, mas l\u00e1 ele \u00e9 mais ou menos um \"noop\" quando voc\u00ea chama <code>.document()<\/code> no <code>AsyncViewRow<\/code>.<\/p>\n<h2>Auxiliar de repeti\u00e7\u00e3o<a id=\"retry\"><\/a><\/h2>\n<p>Na verdade, isso \u00e9 algo que fazia parte do lan\u00e7amento <code>2.1.2<\/code>mas merece ser mencionada em uma postagem de blog.<\/p>\n<p>Um dos benef\u00edcios de usar <code>RxJava<\/code> \u00e9 que voc\u00ea pode compor operadores Rx de forma significativa e se beneficiar de primitivos avan\u00e7ados de tratamento de erros. Entre eles est\u00e1 o <code>tentar novamente<\/code> e <code>retryWhen<\/code> que permitem tentar novamente um fluxo ass\u00edncrono em v\u00e1rias condi\u00e7\u00f5es.<\/p>\n<p>Por exemplo, talvez voc\u00ea queira tentar novamente uma <code>obter<\/code> ao receber <code>BackpressureException<\/code> (a taxa de solicita\u00e7\u00e3o \u00e9 muito alta para que o SDK\/servidor possa lidar com ela) ou <code>TemporaryFailureException<\/code> (o servidor notificou que estava muito ocupado e que as solicita\u00e7\u00f5es deveriam ser atrasadas um pouco). Voc\u00ea pode querer tentar novamente at\u00e9 4 vezes e esperar um pouco antes de fazer isso... Talvez voc\u00ea at\u00e9 queira que esse atraso aumente entre cada tentativa (<em>Backoff exponencial<\/em>)?<\/p>\n<p>Anteriormente, isso exigia um pouco de conhecimento de Rx para ser implementado, mas como esse \u00e9 um caso de uso muito comum, trouxemos classes auxiliares para fazer isso facilmente, na classe <code>com.couchbase.client.java.util.retry<\/code> pacote.<\/p>\n<p>O auxiliar pode produzir um <code>Fun\u00e7\u00e3o<\/code> que pode ser passado diretamente para um <code>Observ\u00e1vel<\/code>'s <code>retryWhen<\/code> ou tamb\u00e9m pode envolver um operador <code>Observ\u00e1vel<\/code> introduzir uma nova tentativa.<\/p>\n<p>Para embrulhar um <code>Observ\u00e1vel<\/code>, use <code>Retry.wrapForRetry(...)<\/code> m\u00e9todos est\u00e1ticos. Eles permitir\u00e3o que voc\u00ea atenda aos requisitos b\u00e1sicos, como tentar novamente por um n\u00famero m\u00e1ximo de tentativas, descrevendo o tipo de <code>Atraso<\/code> que voc\u00ea deseja entre as tentativas.<\/p>\n<p>Para casos de uso ainda mais avan\u00e7ados, h\u00e1 o <code>Criador de novas tentativas<\/code> (que produz uma fun\u00e7\u00e3o a ser passada para a fun\u00e7\u00e3o <code>retryWhen<\/code> operador). Esse construtor permite que voc\u00ea:<\/p>\n<ul>\n<li>escolher em que tipo de erros tentar novamente (ou <code>qualquer()<\/code>, <code>anyOf(...)<\/code>, <code>allBut(...)<\/code>).<\/li>\n<li>escolher quantas vezes tentar novamente (ou <code>uma vez()<\/code> ou <code>max(n)<\/code> vezes).<\/li>\n<li>personalizar o <code>Atraso<\/code> e no qual <code>Agendador<\/code> para esperar (<code>atraso(...)<\/code> m\u00e9todos).<\/li>\n<\/ul>\n<p>Aqui est\u00e1 um exemplo completo que corresponde ao requisito expresso acima:<\/p>\n<h2>Atualiza\u00e7\u00f5es de depend\u00eancias<a id=\"dependencies\"><\/a><\/h2>\n<p>Nesta vers\u00e3o, <code>RxJava<\/code> foi atualizado para a vers\u00e3o <code>1.0.9<\/code>. Tamb\u00e9m atualizamos as depend\u00eancias internas (que s\u00e3o reempacotadas, de modo que \u00e9 transparente para o seu aplicativo) para as vers\u00f5es mais recentes de corre\u00e7\u00e3o de bugs.<\/p>\n<h2>Conclus\u00e3o<a id=\"conclusion\"><\/a><\/h2>\n<p>Esperamos que voc\u00ea aproveite esses novos recursos da vers\u00e3o 2.2. Como sempre, agradecemos seu feedback, especialmente sobre o recurso e a dire\u00e7\u00e3o do Mapeamento de entidades. Portanto, brinque com ele e diga-nos o que achou na se\u00e7\u00e3o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/c\/java-sdk\/\">f\u00f3runs<\/a> por exemplo!<\/p>\n<p>Para obter o 2.2-dp, use o seguinte em um Maven pom.xml (ou baixe diretamente os jars para <a href=\"https:\/\/files.couchbase.com\/maven2\/com\/couchbase\/client\/core-io\/1.2.0-dp\/core-io-1.2.0-dp.jar\">n\u00facleo<\/a> e <a href=\"https:\/\/files.couchbase.com\/maven2\/com\/couchbase\/client\/java-client\/2.2.0-dp\/java-client-2.2.0-dp.jar\">cliente<\/a>):<\/p>\n<p>\u00c9 claro que tamb\u00e9m <strong>Erros corrigidos<\/strong> nesta visualiza\u00e7\u00e3o para desenvolvedores, que tamb\u00e9m far\u00e1 parte do <strong>Lan\u00e7amento oficial do 2.1.3 programado para a pr\u00f3xima semana<\/strong>.<\/p>\n<p>Ainda n\u00e3o terminamos a vers\u00e3o 2.2! Teremos muitos recursos em breve, incluindo <em>mais<\/em> Suporte a N1QL e <strong>perfil e m\u00e9tricas incorporados<\/strong>.<\/p>\n<p>Boa codifica\u00e7\u00e3o!<br \/>\n<br \/> - A equipe do Java SDK<\/p>","protected":false},"excerpt":{"rendered":"<p>On behalf of the SDK Team, it is my pleasure to introduce the next big release for the Java SDK, the 2.2 version. The team has been working hard to bring you new awesome features, and today we think it&#8217;s [&hellip;]<\/p>","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-1924","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 v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase Java SDK 2.2 Developer Preview 1 - 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\/pt\/javasdk-2-2-dp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Java SDK 2.2 Developer Preview 1\" \/>\n<meta property=\"og:description\" content=\"On behalf of the SDK Team, it is my pleasure to introduce the next big release for the Java SDK, the 2.2 version. The team has been working hard to bring you new awesome features, and today we think it&#8217;s [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/javasdk-2-2-dp\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-30T08:02:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:18:47+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=\"7 minutos\" \/>\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-dp\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/\"},\"author\":{\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\"},\"headline\":\"Couchbase Java SDK 2.2 Developer Preview 1\",\"datePublished\":\"2015-04-30T08:02:50+00:00\",\"dateModified\":\"2025-10-09T14:18:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/\"},\"wordCount\":1585,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/\",\"name\":\"Couchbase Java SDK 2.2 Developer Preview 1 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-04-30T08:02:50+00:00\",\"dateModified\":\"2025-10-09T14:18:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#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-dp\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Java SDK 2.2 Developer Preview 1\"}]},{\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/author\/simon-basle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Java SDK 2.2 Developer Preview 1 - 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\/pt\/javasdk-2-2-dp\/","og_locale":"pt_BR","og_type":"article","og_title":"Couchbase Java SDK 2.2 Developer Preview 1","og_description":"On behalf of the SDK Team, it is my pleasure to introduce the next big release for the Java SDK, the 2.2 version. The team has been working hard to bring you new awesome features, and today we think it&#8217;s [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/javasdk-2-2-dp\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-04-30T08:02:50+00:00","article_modified_time":"2025-10-09T14:18:47+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":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/"},"author":{"name":"Simon Basle, Software Engineer, Pivotal","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1"},"headline":"Couchbase Java SDK 2.2 Developer Preview 1","datePublished":"2015-04-30T08:02:50+00:00","dateModified":"2025-10-09T14:18:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/"},"wordCount":1585,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/","url":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/","name":"Couchbase Java SDK 2.2 Developer Preview 1 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-04-30T08:02:50+00:00","dateModified":"2025-10-09T14:18:47+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/#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-dp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Java SDK 2.2 Developer Preview 1"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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, engenheiro de software, Pivotal","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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_ \u00e9 um engenheiro de software baseado em Paris que trabalha na equipe Spring da Pivotal. Anteriormente, ele trabalhou na equipe do Couchbase Java SDK. Seus interesses abrangem aspectos de design de software (OOP, padr\u00f5es de design, arquitetura de software), clientes avan\u00e7ados, o que est\u00e1 al\u00e9m do c\u00f3digo (integra\u00e7\u00e3o cont\u00ednua, (D)VCS, pr\u00e1ticas recomendadas) e programa\u00e7\u00e3o reativa. Ele tamb\u00e9m \u00e9 editor da vers\u00e3o francesa do InfoQ.com.","url":"https:\/\/www.couchbase.com\/blog\/pt\/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_ \u00e9 um engenheiro de software baseado em Paris que trabalha na equipe Spring da Pivotal. Anteriormente, ele trabalhou na equipe do Couchbase Java SDK. Seus interesses abrangem aspectos de design de software (OOP, padr\u00f5es de design, arquitetura de software), clientes avan\u00e7ados, o que est\u00e1 al\u00e9m do c\u00f3digo (integra\u00e7\u00e3o cont\u00ednua, (D)VCS, pr\u00e1ticas recomendadas) e programa\u00e7\u00e3o reativa. Ele tamb\u00e9m \u00e9 editor da vers\u00e3o francesa do InfoQ.com."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1924","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1924"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1924\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1924"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}