{"id":2080,"date":"2015-07-27T08:17:42","date_gmt":"2015-07-27T08:17:41","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2080"},"modified":"2025-10-09T07:18:16","modified_gmt":"2025-10-09T14:18:16","slug":"java-sdk-2-2-0-developer-preview-refresh","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/java-sdk-2-2-0-developer-preview-refresh\/","title":{"rendered":"Atualiza\u00e7\u00e3o do Java SDK 2.2.0 Developer Preview"},"content":{"rendered":"<p>Nota de mar\u00e7o de 2017: informa\u00e7\u00f5es detalhadas sobre o \u00f4nibus do evento e a coleta de m\u00e9tricas podem ser encontradas no <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/sdk\/java\/collecting-information-and-logging.html\">documenta\u00e7\u00e3o oficial<\/a>. Algumas informa\u00e7\u00f5es deste artigo podem estar desatualizadas.<\/p>\n<p>Enquanto a Europa estava derretendo no calor do ver\u00e3o, <a href=\"https:\/\/twitter.com\/simonbasle\">Simon<\/a> (de Paris), <a href=\"https:\/\/twitter.com\/avsej\">Sergey<\/a> (de Minsk) e <a href=\"https:\/\/twitter.com\/daschl\">I<\/a> (de Viena) reutilizou o calor e preparou uma nova vers\u00e3o para voc\u00ea. \u00c9 a segunda pr\u00e9via para desenvolvedores da pr\u00f3xima vers\u00e3o 2.2.0. Al\u00e9m das corre\u00e7\u00f5es de bugs (que tamb\u00e9m foram inclu\u00eddas na vers\u00e3o 2.1.4), ela traz os seguintes aprimoramentos e novos recursos<\/p>\n<ul>\n<li>Suporte estendido para N1QL e escalonamento multidimensional (MDS)<\/li>\n<li>Aprimoramentos das APIs Sync e Async<\/li>\n<li>Aprimoramentos de suporte com m\u00e9tricas<\/li>\n<li>Diversas atualiza\u00e7\u00f5es de depend\u00eancias e altera\u00e7\u00f5es no DCP<\/li>\n<\/ul>\n<p>Veja como voc\u00ea pode obt\u00ea-lo agora mesmo:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/daschl\/5b32706a0a4fe50cfaa4.js\">https:\/\/gist.github.com\/daschl\/5b32706a0a4fe50cfaa4.js<\/a><\/p>\n<h2>Suporte estendido a N1QL e MDS<\/h2>\n<p>A funcionalidade do N1QL DSL foi ampliada para suportar uma variedade de fun\u00e7\u00f5es N1QL, incluindo (mas n\u00e3o se limitando a) fun\u00e7\u00f5es de agrega\u00e7\u00e3o, matriz, compara\u00e7\u00e3o, data, meta, correspond\u00eancia de padr\u00f5es e string. Todas essas fun\u00e7\u00f5es est\u00e3o localizadas no namespace \"com.couchbase.client.java.query.dsl.functions\" e devem ser importadas como m\u00e9todos auxiliares est\u00e1ticos por conveni\u00eancia.<\/p>\n<p>Como o Multi-Dimensional Scaling tamb\u00e9m afeta os buckets do Memcached (nem todo n\u00f3 precisa ser um n\u00f3 de dados), o SDK agora garante automaticamente que apenas esses n\u00f3s de dados sejam usados no algoritmo de hashing ketama. Isso \u00e9 totalmente transparente para o usu\u00e1rio, mas \u00e9 importante escolher a vers\u00e3o 2.2.0 ou posterior se quiser usar o Couchbase Server 4.0 com MDS e buckets memcached. O SDK 1.4.x n\u00e3o \u00e9 afetado e continuar\u00e1 funcionando sem problemas.<\/p>\n<p>Por fim, para garantir que todas as APIs sejam consistentes, optamos por renomear as consultas \"parametrizadas\" para \"parametrizadas\", que \u00e9 considerada a forma correta na documenta\u00e7\u00e3o do Couchbase e nas APIs do SDK.<\/p>\n<h2>Aprimoramentos das APIs Sync e Async<\/h2>\n<p>Uma das armadilhas comuns da API ass\u00edncrona \u00e9 que os Observables retornados eram \"quentes\" em vez de \"frios\". Isso tem implica\u00e7\u00f5es sutis na sem\u00e2ntica de repeti\u00e7\u00e3o e na reutiliza\u00e7\u00e3o. Especialmente se quiser usar o operador de repeti\u00e7\u00e3o, voc\u00ea precisa \"adiar\" o observ\u00e1vel retornado para que, a cada nova assinatura, um novo observ\u00e1vel seja gerado. Na vers\u00e3o 2.2.0, decidimos tornar todas as chamadas de API frias, envolvendo-as para voc\u00ea imediatamente. O c\u00f3digo existente continuar\u00e1 funcionando, e at\u00e9 mesmo os adiamentos duplos n\u00e3o causar\u00e3o nenhum dano.<\/p>\n<p>Compare esse c\u00f3digo de repeti\u00e7\u00e3o com 2.1.4:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/daschl\/0666841cb2bd69e53d17.js\">https:\/\/gist.github.com\/daschl\/0666841cb2bd69e53d17.js<\/a><\/p>\n<p>com o ligeiramente mais simples em rela\u00e7\u00e3o ao 2.2.0:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/daschl\/2b63c5193bac4dd11713.js\">https:\/\/gist.github.com\/daschl\/2b63c5193bac4dd11713.js<\/a><\/p>\n<p>Como as chamadas getFromReplica servem como uma maneira de tratar a disponibilidade em detrimento da consist\u00eancia, muitas vezes faz sentido pegar apenas os primeiros N documentos que s\u00e3o retornados. Embora isso seja muito f\u00e1cil de fazer na API ass\u00edncrona com o operador \"take()\", a API s\u00edncrona s\u00f3 expunha uma vers\u00e3o em lista. Para torn\u00e1-la mais flex\u00edvel para os usu\u00e1rios que trabalham com a API de bloqueio, foram adicionadas novas sobrecargas que agora retornam um Iterator. Se voc\u00ea se importa apenas com o primeiro documento retornado, veja como fazer isso:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/daschl\/0c7c92642d8c0af7dae3.js\">https:\/\/gist.github.com\/daschl\/0c7c92642d8c0af7dae3.js<\/a><\/p>\n<p>Anteriormente, n\u00e3o era poss\u00edvel falhar em uma opera\u00e7\u00e3o de contador se o documento n\u00e3o existisse - ele era sempre inicializado com 0. Como esse recurso estava dispon\u00edvel na s\u00e9rie 1.x, decidimos traz\u00ea-lo de volta \u00e0 sobrecarga do m\u00e9todo em que nenhum valor padr\u00e3o \u00e9 especificado.<\/p>\n<p>Portanto, na vers\u00e3o 2.2.0, essa sobrecarga de m\u00e9todo \"Observable counter(String id, long delta)\" falhar\u00e1 com uma \"DocumentDoesNotExistException\" se o documento n\u00e3o existir. Se voc\u00ea quiser o comportamento anterior, basta usar a sobrecarga com o valor inicial e defini-lo como 0.<\/p>\n<p>Por fim, o SDK agora oferece suporte a mais op\u00e7\u00f5es de configura\u00e7\u00e3o de ambiente (incluindo a configura\u00e7\u00e3o de TCP_NODELAY) e os documentos de design agora podem ser configurados com op\u00e7\u00f5es na cria\u00e7\u00e3o. Veja como voc\u00ea pode criar um documento de design e alterar o intervalo m\u00ednimo de atualiza\u00e7\u00e3o padr\u00e3o:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/daschl\/ddec1089eed01285d0c4.js\">https:\/\/gist.github.com\/daschl\/ddec1089eed01285d0c4.js<\/a><\/p>\n<h2>Aprimoramentos de suporte com m\u00e9tricas<\/h2>\n<p>Uma pergunta comum que os desenvolvedores e os operadores se fazem \u00e9: o que est\u00e1 acontecendo no meu aplicativo? E tamb\u00e9m, muitas vezes, relacionada: por que recebo uma TimeoutException? Estamos depurando implanta\u00e7\u00f5es de produ\u00e7\u00e3o h\u00e1 alguns anos e aprendemos algumas coisas ao fazer isso. Uma das coisas mais importantes s\u00e3o as informa\u00e7\u00f5es. Quanto mais informa\u00e7\u00f5es voc\u00ea conseguir obter do seu aplicativo, melhor poder\u00e1 entend\u00ea-lo.<\/p>\n<p>Exatamente por esse motivo, adicionamos m\u00e9tricas de lat\u00eancia e tempo de execu\u00e7\u00e3o sempre ativas ao SDK, que s\u00e3o publicadas no barramento de eventos e podem ser consumidas como mensagens. H\u00e1 uma grande diferen\u00e7a entre apenas registrar coisas ou realmente exp\u00f4-las em um barramento de eventos (mesmo que elas tamb\u00e9m sejam registradas posteriormente). Ele permite que voc\u00ea o consuma e, o que \u00e9 mais importante, reaja a ele instantaneamente. Voc\u00ea pode pegar os dados e envi\u00e1-los ao seu sistema de monitoramento favorito, como nagios, graphite ou logstash. N\u00e3o h\u00e1 necessidade de analisar os arquivos de log ap\u00f3s uma interrup\u00e7\u00e3o do sistema que voc\u00ea tem uma equipe para analisar.<\/p>\n<p>Por padr\u00e3o, o SDK coletar\u00e1 de forma transparente as lat\u00eancias das opera\u00e7\u00f5es executadas por ele e as gravar\u00e1 no barramento de eventos a cada hora. O intervalo de emiss\u00e3o, bem como muitas outras configura\u00e7\u00f5es, s\u00e3o totalmente personaliz\u00e1veis por meio do ambiente. Aqui est\u00e1 um exemplo simples que escuta o barramento de eventos e imprime apenas eventos de m\u00e9trica no stderr (estamos distribuindo muito mais eventos do que aqueles no barramento para oferecer o m\u00e1ximo de flexibilidade):<\/p>\n<p><a href=\"https:\/\/gist.github.com\/daschl\/51e5193a57d909fd072b.js\">https:\/\/gist.github.com\/daschl\/51e5193a57d909fd072b.js<\/a><\/p>\n<p>Voc\u00ea pode identificar dois eventos aqui. O primeiro imprime informa\u00e7\u00f5es de tempo de execu\u00e7\u00e3o, como estat\u00edsticas de GC, mem\u00f3ria e uso de thread. O outro \u00e9 um pouco maior e cont\u00e9m estat\u00edsticas de lat\u00eancia (e taxa de transfer\u00eancia) coletadas em histogramas internos. As informa\u00e7\u00f5es impressas cont\u00eam lat\u00eancias m\u00ednimas e m\u00e1ximas, o n\u00famero de opera\u00e7\u00f5es, bem como percentis. Por baixo dos panos, estamos usando o excelente <a href=\"https:\/\/hdrhistogram.github.io\/HdrHistogram\/\">HdrHistograma<\/a> e o pacote LatencyUtils relacionado.<\/p>\n<p>Observe como ele n\u00e3o apenas imprime o resultado por opera\u00e7\u00e3o, mas voc\u00ea pode identificar o n\u00f3 de destino, bem como o c\u00f3digo de status no retorno. Isso permite que voc\u00ea crie uma forma de \u00e1rvore do estado do sistema e obtenha informa\u00e7\u00f5es sobre o desempenho de n\u00f3s ou servi\u00e7os individuais (o n\u00f3 A \u00e9 mais lento do que os outros, a substitui\u00e7\u00e3o \u00e9 mais r\u00e1pida do que a inser\u00e7\u00e3o, muitos erros contra o n\u00f3 B,...).<\/p>\n<p>Com base no feedback dos usu\u00e1rios, estamos pensando em adicionar consumidores prontos para registrar essas m\u00e9tricas e envi\u00e1-las ao graphite ou ao logstash. Al\u00e9m disso, adicionaremos formatos de sa\u00edda mais sofisticados, incluindo JSON bem formatado, que pode ser analisado por humanos e m\u00e1quinas. Informe-nos qual formato de destino voc\u00ea gostaria de ver incorporado ao driver.<\/p>\n<h2>Atualiza\u00e7\u00f5es de depend\u00eancias e altera\u00e7\u00f5es de DCP<\/h2>\n<p>Como estamos atualizando a vers\u00e3o secund\u00e1ria, tamb\u00e9m estamos atualizando as depend\u00eancias para suas vers\u00f5es mais recentes de corre\u00e7\u00e3o de bugs. Aqui est\u00e1 a lista completa de depend\u00eancias, mas lembre-se de que, na verdade, s\u00f3 expomos o RxJava como uma depend\u00eancia expl\u00edcita; todas as outras s\u00e3o reempacotadas para n\u00e3o causar problemas em seu ambiente se houver poss\u00edveis vers\u00f5es conflitantes.<\/p>\n<p>Aqui est\u00e3o as altera\u00e7\u00f5es da vers\u00e3o 2.2.0-dp2 em rela\u00e7\u00e3o \u00e0 2.1.4:<\/p>\n<ul>\n<li>RxJava da vers\u00e3o 1.0.4 para a 1.0.13<\/li>\n<li>Netty de 4.0.25.Final para 4.0.29.Final<\/li>\n<li>LMAX Disruptor 3.3.0 a 3.3.2<\/li>\n<li>Jackson da vers\u00e3o 2.4.2 para a 2.5.4<\/li>\n<li>LatencyUtils novo na vers\u00e3o 2.0.2<\/li>\n<\/ul>\n<p>Al\u00e9m disso, Sergey est\u00e1 ocupado trabalhando na amplia\u00e7\u00e3o do Kafka Connector, o que tamb\u00e9m resultou em aprimoramentos do DCP na biblioteca core-io. Ele ainda \u00e9 bastante experimental, mas estamos nos aproximando de um ponto em que pode ser consumido por um p\u00fablico mais amplo.<\/p>\n<h2>O caminho para a GA<\/h2>\n<p>Outro recurso do N1QL que ainda est\u00e1 em fase de incuba\u00e7\u00e3o s\u00e3o as declara\u00e7\u00f5es preparadas (nomeadas). O c\u00f3digo foi atualizado nesta segunda visualiza\u00e7\u00e3o para desenvolvedores, mas ainda est\u00e1 sujeito a altera\u00e7\u00f5es, por isso comentamos essa API por enquanto. Seja paciente at\u00e9 chegarmos ao GA para obter suporte completo e documenta\u00e7\u00e3o abrangente.<\/p>\n<p>Al\u00e9m disso, n\u00e3o h\u00e1 mais recursos importantes na lista de tarefas para a vers\u00e3o 2.2.0, portanto, estamos mudando a marcha para corre\u00e7\u00f5es menores, aprimoramentos de estabilidade e, principalmente, documenta\u00e7\u00e3o. Para que esta seja a melhor vers\u00e3o que j\u00e1 lan\u00e7amos at\u00e9 agora, precisamos da sua opini\u00e3o! Experimente e d\u00ea seu feedback, especialmente sobre os novos recursos e o suporte ao N1QL. Diga-nos o que est\u00e1 faltando ou quebrado por meio de um coment\u00e1rio aqui, nos f\u00f3runs ou no rastreador de bugs!<\/p>","protected":false},"excerpt":{"rendered":"<p>Note from March 2017: detailed information on the event bus and metrics collection can be found in the official documentation. Some information in this article may be outdated. While europe was melting away in the summer heat, Simon (from Paris), [&hellip;]<\/p>","protected":false},"author":19,"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":[8987],"class_list":["post-2080","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.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java SDK 2.2.0 Developer Preview Refresh - 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\/java-sdk-2-2-0-developer-preview-refresh\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java SDK 2.2.0 Developer Preview Refresh\" \/>\n<meta property=\"og:description\" content=\"Note from March 2017: detailed information on the event bus and metrics collection can be found in the official documentation. Some information in this article may be outdated. While europe was melting away in the summer heat, Simon (from Paris), [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/java-sdk-2-2-0-developer-preview-refresh\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-07-27T08:17:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:18:16+00:00\" \/>\n<meta name=\"author\" content=\"Michael Nitschinger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@daschl\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Nitschinger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/\"},\"author\":{\"name\":\"Michael Nitschinger\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e5d4d332756da6f361dd88c1576de61d\"},\"headline\":\"Java SDK 2.2.0 Developer Preview Refresh\",\"datePublished\":\"2015-07-27T08:17:41+00:00\",\"dateModified\":\"2025-10-09T14:18:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/\"},\"wordCount\":1380,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#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\/java-sdk-2-2-0-developer-preview-refresh\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/\",\"name\":\"Java SDK 2.2.0 Developer Preview Refresh - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-07-27T08:17:41+00:00\",\"dateModified\":\"2025-10-09T14:18:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#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\/java-sdk-2-2-0-developer-preview-refresh\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java SDK 2.2.0 Developer Preview Refresh\"}]},{\"@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\/e5d4d332756da6f361dd88c1576de61d\",\"name\":\"Michael Nitschinger\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/95e178617974d46e3b02dd1754a3f60b\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dad99b5e02a74ca4bec14352e9da710160647a97290814b669babb3aac0ea675?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dad99b5e02a74ca4bec14352e9da710160647a97290814b669babb3aac0ea675?s=96&d=mm&r=g\",\"caption\":\"Michael Nitschinger\"},\"description\":\"Michael Nitschinger works as a Principal Software Engineer at Couchbase. He is the architect and maintainer of the Couchbase Java SDK, one of the first completely reactive database drivers on the JVM. He also authored and maintains the Couchbase Spark Connector. Michael is active in the open source community, a contributor to various other projects like RxJava and Netty.\",\"sameAs\":[\"https:\/\/nitschinger.at\",\"https:\/\/x.com\/daschl\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/michael-nitschinger\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java SDK 2.2.0 Developer Preview Refresh - 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\/java-sdk-2-2-0-developer-preview-refresh\/","og_locale":"pt_BR","og_type":"article","og_title":"Java SDK 2.2.0 Developer Preview Refresh","og_description":"Note from March 2017: detailed information on the event bus and metrics collection can be found in the official documentation. Some information in this article may be outdated. While europe was melting away in the summer heat, Simon (from Paris), [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/java-sdk-2-2-0-developer-preview-refresh\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-07-27T08:17:41+00:00","article_modified_time":"2025-10-09T14:18:16+00:00","author":"Michael Nitschinger","twitter_card":"summary_large_image","twitter_creator":"@daschl","twitter_misc":{"Written by":"Michael Nitschinger","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/"},"author":{"name":"Michael Nitschinger","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e5d4d332756da6f361dd88c1576de61d"},"headline":"Java SDK 2.2.0 Developer Preview Refresh","datePublished":"2015-07-27T08:17:41+00:00","dateModified":"2025-10-09T14:18:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/"},"wordCount":1380,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#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\/java-sdk-2-2-0-developer-preview-refresh\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/","url":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/","name":"Java SDK 2.2.0 Developer Preview Refresh - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-07-27T08:17:41+00:00","dateModified":"2025-10-09T14:18:16+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/java-sdk-2-2-0-developer-preview-refresh\/#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\/java-sdk-2-2-0-developer-preview-refresh\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java SDK 2.2.0 Developer Preview Refresh"}]},{"@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\/e5d4d332756da6f361dd88c1576de61d","name":"Michael Nitschinger","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/95e178617974d46e3b02dd1754a3f60b","url":"https:\/\/secure.gravatar.com\/avatar\/dad99b5e02a74ca4bec14352e9da710160647a97290814b669babb3aac0ea675?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dad99b5e02a74ca4bec14352e9da710160647a97290814b669babb3aac0ea675?s=96&d=mm&r=g","caption":"Michael Nitschinger"},"description":"Michael Nitschinger trabalha como engenheiro de software principal na Couchbase. Ele \u00e9 o arquiteto e mantenedor do Couchbase Java SDK, um dos primeiros drivers de banco de dados totalmente reativos na JVM. Ele tamb\u00e9m \u00e9 o autor e mantenedor do Couchbase Spark Connector. Michael participa ativamente da comunidade de c\u00f3digo aberto e contribui para v\u00e1rios outros projetos, como RxJava e Netty.","sameAs":["https:\/\/nitschinger.at","https:\/\/x.com\/daschl"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/michael-nitschinger\/"}]}},"authors":[{"term_id":8987,"user_id":19,"is_guest":0,"slug":"michael-nitschinger","display_name":"Michael Nitschinger","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/dad99b5e02a74ca4bec14352e9da710160647a97290814b669babb3aac0ea675?s=96&d=mm&r=g","author_category":"","last_name":"Nitschinger, Principal Software Engineer, Couchbase","first_name":"Michael","job_title":"","user_url":"https:\/\/nitschinger.at","description":"Michael Nitschinger trabalha como engenheiro de software principal na Couchbase. Ele \u00e9 o arquiteto e mantenedor do Couchbase Java SDK, um dos primeiros drivers de banco de dados totalmente reativos na JVM. Ele tamb\u00e9m \u00e9 o autor e mantenedor do Couchbase Spark Connector. Michael participa ativamente da comunidade de c\u00f3digo aberto e contribui para v\u00e1rios outros projetos, como RxJava e Netty."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2080","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\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2080"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2080\/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=2080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2080"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}