{"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\/es\/javasdk-2-2-dp\/","title":{"rendered":"Couchbase Java SDK 2.2 Developer Preview 1"},"content":{"rendered":"<p>En nombre del equipo del SDK, tengo el placer de presentar la pr\u00f3xima gran versi\u00f3n del SDK de Java, el <strong>Versi\u00f3n 2.2<\/strong>. El equipo ha estado trabajando duro para traerte nuevas e incre\u00edbles funciones, y hoy creemos que es el momento de arrojar algo de luz sobre ellas publicando una primera versi\u00f3n preliminar para desarrolladores.<\/p>\n<p>La versi\u00f3n 2.2 incorpora numerosas novedades:<\/p>\n<ul>\n<li>Mejorado <a href=\"#n1ql\">N1QL<\/a> soporte<\/li>\n<li>Simple <a href=\"#odm\">Asignaci\u00f3n de entidades<\/a><\/li>\n<li>Varias API <a href=\"#enhancement\">mejoras<\/a><\/li>\n<li>Clases auxiliares para simplificar <a href=\"#retry\">reintentar<\/a> manejo de<\/li>\n<li>Versi\u00f3n protuberancias de <a href=\"#dependencies\">algunas dependencias<\/a><\/li>\n<\/ul>\n<p>Saltar al <a href=\"#conclusion\">conclusi\u00f3n<\/a> si no puedes esperar a tener el c\u00f3digo en tus manos :)<\/p>\n<h2>Cambios relacionados con N1QL<a id=\"n1ql\"><\/a><\/h2>\n<p>Recientemente se ha publicado la versi\u00f3n 4.0 Developer Preview de Couchbase Server. Entre las muchas caracter\u00edsticas de esta nueva versi\u00f3n, destaca la integraci\u00f3n de nuestro nuevo lenguaje de consulta \"SQL for Documents\" (nombre en clave <code>N1QL<\/code>) es uno de los principales.<\/p>\n<p>En versiones anteriores del Java SDK, ya ten\u00edamos soporte para N1QL (especialmente para la 4\u00aa Developer Preview independiente que fue lanzada por el Query Team a principios de este a\u00f1o), y continuamos de esta manera.<\/p>\n<p>Desde N1QL DP4, hemos <strong>ampliado el DSL<\/strong>ha a\u00f1adido un DSL para <strong>gesti\u00f3n de \u00edndices<\/strong> y a\u00f1adi\u00f3 <strong>compatibilidad con contrase\u00f1as de cubo<\/strong>.<\/p>\n<h3>Extensi\u00f3n DSL<\/h3>\n<p>Se han ampliado y mejorado varias partes de la DSL. Hemos hecho que todo el <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/\">Tutorial N1QL<\/a> puede implementarse a trav\u00e9s del DSL de Java.<\/p>\n<p>En <code>DESDE<\/code> puede hacer referencia a los ID de documento mediante la cl\u00e1usula <code>UTILIZAR TECLAS<\/code> mientras que otras cl\u00e1usulas (como <code>\u00daNASE A<\/code> o <code>NEST<\/code>) se refieren a los identificadores de documento mediante <code>EN TECLAS<\/code> cl\u00e1usula.<br \/>\nEl DSL existente para eso s\u00f3lo produc\u00eda <code>TECLAS<\/code> que no es suficiente, por lo que ambas variantes se reimplementaron como <code>useKeys<\/code>\/<code>useKeysValues<\/code> y <code>onKeys<\/code>\/<code>onKeysValues<\/code> en la DSL.<\/p>\n<p>En N1QL, tenemos el concepto de predicados de colecci\u00f3n (o comprensiones) con los operadores ANY, EVERY, ARRAY y FIRST. Hemos introducido un mini-DSL, <code>Colecciones<\/code>para construir tales predicados y producir un <code>Expresi\u00f3n<\/code> que los representa, para utilizarlos en el resto del DSL.<\/p>\n<p>En algunos casos, N1QL ofrece alternativas sint\u00e1cticas y valores por defecto. Tres de ellos vienen a la mente como hemos abordado tanto un poco diferente:<\/p>\n<ul>\n<li>el <code>AS<\/code> la sintaxis de aliasing a veces puede omitir la palabra clave por completo, como en <code>FROM default AS src<\/code> vs <code>FROM src por defecto<\/code>. Hemos optado por producir \u00fanicamente la forma expl\u00edcita con el <code>AS<\/code> (ya que el usuario tiene que llamar a la funci\u00f3n <code>as(String alias)<\/code> de todos modos).<\/li>\n<li><code>UTILIZAR TECLAS<\/code> y <code>EN TECLAS<\/code> tienen una sintaxis alternativa opcional <code>CLAVES PRIMARIAS DE USUARIO<\/code> y <code>EN CLAVES PRIMARIAS<\/code>. Son sem\u00e1nticamente equivalentes y s\u00f3lo producimos la primera forma.<\/li>\n<li><code>ORDENAR POR<\/code> tiene una direcci\u00f3n de ordenaci\u00f3n por defecto en la que no se pide expl\u00edcitamente <code>DESC<\/code> ni <code>ASC<\/code>. Hemos implementado esta opci\u00f3n en el <code>Ordenar<\/code> con el operador <code>def(Expresi\u00f3n onQueOrdenar)<\/code> m\u00e9todo.<\/li>\n<\/ul>\n<p>Unas cuantas funciones, algunas de las cuales se implementaron previamente en la aplicaci\u00f3n <code>Funciones<\/code> se han a\u00f1adido\/trasladado a la clase <code>...query.dsl.functions<\/code> en clases auxiliares separadas que coincidan con la categor\u00eda de las funciones que contienen (p. ej. <code>StringFunctions<\/code>).<\/p>\n<p>En <code>Expresi\u00f3n<\/code>hemos a\u00f1adido algunos m\u00e9todos de f\u00e1brica para construir Expresiones a partir de un archivo <code>Declaraci\u00f3n<\/code> (como hacer una subconsulta) y construir una <code>ruta<\/code>:<\/p>\n<p>Tambi\u00e9n hemos a\u00f1adido operadores aritm\u00e9ticos <code>a\u00f1ada<\/code>, <code>reste<\/code>, <code>multiplicar<\/code> y <code>dividir<\/code>:<\/p>\n<p>Por \u00faltimo, a\u00f1adimos otro mini-DSL para el <code>CASO<\/code> declaraci\u00f3n. CASE puede utilizarse para producir resultados alternativos en funci\u00f3n de una condici\u00f3n. O bien la condici\u00f3n se hace expl\u00edcita en cada alternativa <code>CUANDO<\/code> (la expresi\u00f3n all\u00ed es condicional, y esta forma de CASE se denomina \"caso de b\u00fasqueda\"), o la condici\u00f3n es simplemente la igualdad con un identificador\/expresi\u00f3n dado al principio del CASE (como <code>CASE usuario.g\u00e9nero WHEN \"hombre\" THEN 1<\/code>). He aqu\u00ed un ejemplo del DSL en acci\u00f3n:<\/p>\n<h3>DSL de gesti\u00f3n de \u00edndices<\/h3>\n<p>Si ya has jugado con N1QL, sabr\u00e1s que puedes crear \u00edndices para acelerar significativamente tus consultas. Hasta ahora, la \u00fanica forma de crearlos mediante programaci\u00f3n era emitir una sentencia String sin procesar. Ahora ya no.<\/p>\n<p>El DSL de gesti\u00f3n de \u00edndices ofrece soporte para las distintas operaciones relacionadas con los \u00edndices, a saber:<\/p>\n<p>Creaci\u00f3n de un \u00edndice:<\/p>\n<p>Creaci\u00f3n de una <em>principal<\/em> \u00edndice:<\/p>\n<p>\u00cdndices de ca\u00edda:<\/p>\n<p>Construir \u00edndices que se aplazaron en el momento de la creaci\u00f3n:<\/p>\n<p>Observe que la mayor\u00eda de los identificadores (nombres de \u00edndice, espacio de nombre\/espacio de clave) se escapan autom\u00e1ticamente mediante comillas.<\/p>\n<h3>Soporte para contrase\u00f1as de cubos<\/h3>\n<p>Al consultar el servicio N1QL, ahora enriquecemos autom\u00e1ticamente las cabeceras de la solicitud con la informaci\u00f3n de autenticaci\u00f3n obtenida de la llamada <code>Cubo<\/code>que permite consultar un cubo protegido por contrase\u00f1a de forma transparente (como ya ocurr\u00eda con <code>ViewQuery<\/code>s).<\/p>\n<h2>Asignaci\u00f3n de entidades<a id=\"odm\"><\/a><\/h2>\n<p>Esta caracter\u00edstica ha sido muy solicitada en el pasado: la capacidad de mapear f\u00e1cilmente un objeto de dominio a un documento Couchbase, y viceversa.<\/p>\n<p>Hemos empezado a explorar este <code>Asignaci\u00f3n de entidades<\/code> (o <code>ODM<\/code>, <code>Cartograf\u00eda de documentos objeto<\/code>) en 2.2. El enfoque consiste en proporcionar una API similar a <code>Cubo<\/code> dedicada a ODM. Esta API se describe en el <code>Repositorio<\/code> y se puede obtener un repositorio de un cubo llamando a <code>bucket.repository()<\/code>.<\/p>\n<p>Los m\u00e9todos de la API del repositorio se ocupan de un nuevo tipo de <code>Documento<\/code>El <code>DocumentoEntidad<\/code>. Se adhiere a la sem\u00e1ntica Document que separa los metadatos del contenido (su objeto de dominio en este caso). Se espera que el objeto de dominio est\u00e9 anotado (v\u00e9ase m\u00e1s abajo) para que el mapeo funcione.<\/p>\n<p><code>DocumentoEntidad<\/code> puede utilizarse para dar expl\u00edcitamente un <code>id<\/code>que se utilizar\u00e1 como clave primaria en Couchbase, pero al contrario que el otro <code>Documento<\/code> a las que est\u00e1 acostumbrado, esto es opcional. Como alternativa, puede anotar un c\u00f3digo <code>Cadena<\/code> en su clase de dominio con <code>@Id<\/code> para utilizarlo como identificador del documento. <code>@Id<\/code> nunca se almacena en el contenido JSON en Couchbase...<\/p>\n<p>S\u00f3lo los atributos marcados con <code>@Campo<\/code> se tienen en cuenta y pasan a formar parte del contenido JSON de la base de datos o se inyectan en el objeto en el momento de su env\u00edo. <code>consiga<\/code>. Esta anotaci\u00f3n tambi\u00e9n puede llevar un alias para el nombre del campo:<\/p>\n<p>Las limitaciones actuales (algunas de las cuales pueden suprimirse en el futuro) son:<\/p>\n<ul>\n<li><code>@Campo<\/code> s\u00f3lo es compatible con los atributos de tipo b\u00e1sicos (los que pueden a\u00f1adirse a un atributo <code>JsonObject<\/code>), y en general este ODM es para casos sencillos. Se est\u00e1 trabajando en el soporte para Mapas, Listas y Conversores personalizados.<\/li>\n<li>s\u00f3lo las clases con constructores de carga cero son compatibles con ODM.<\/li>\n<li>se realiza mediante reflexi\u00f3n para obtener\/establecer los valores de los atributos la primera vez (despu\u00e9s se almacena internamente en cach\u00e9).<\/li>\n<\/ul>\n<h2>Mejoras en la API<a id=\"enhancement\"><\/a><\/h2>\n<p>El actual <code>Cubo<\/code> La API ha experimentado un par de mejoras.<\/p>\n<p>En primer lugar, se ha introducido una nueva operaci\u00f3n para comprobar f\u00e1cilmente la existencia de una clave sin tener que pagar el coste de la misma <code>consiga<\/code>tando el contenido del documento. Esta es la <code>exist(Cadena clave)<\/code> m\u00e9todo:<\/p>\n<p>En segundo lugar, una funci\u00f3n relacionada con <strong>vistas<\/strong> que estaba presente en la generaci\u00f3n 1.x del SDK pero no en la 2.x es la posibilidad de solicitar una obtenci\u00f3n masiva de los documentos al realizar una consulta de la vista (la funci\u00f3n <code>incluirDocs<\/code> opci\u00f3n).<\/p>\n<p>Esto no es realmente dif\u00edcil de hacer en 2.x cuando se utiliza la funci\u00f3n <code>async<\/code> API (mediante la funci\u00f3n <a href=\"\">patr\u00f3n de masa<\/a> que depende de RxJava), pero falta cuando se utiliza la API de sincronizaci\u00f3n. De hecho, la \u00fanica forma de obtener el documento correspondiente a cada fila en modo de sincronizaci\u00f3n es llamar a <code>fila.documento()<\/code>que bloquear\u00e1 y disparar\u00e1 una petici\u00f3n por fila, en serie. Esto es bastante ineficiente.<\/p>\n<p>As\u00ed que hemos reintroducido el <code>incluirDocs<\/code> en la API de consulta de vistas. Esto desencadenar\u00e1 una carga as\u00edncrona eficiente del documento de cada fila en segundo plano, de la que tambi\u00e9n se beneficia la API de bloqueo (las filas ya tendr\u00e1n el valor <code>Documento<\/code> en cach\u00e9 al llamar a <code>documento()<\/code> en ellas). Tambi\u00e9n se puede utilizar en la API as\u00edncrona, pero all\u00ed es m\u00e1s o menos un \"noop\" cuando se llama a <code>.document()<\/code> en el <code>AsyncViewRow<\/code>.<\/p>\n<h2>Ayuda de reintento<a id=\"retry\"><\/a><\/h2>\n<p>Esto es en realidad algo que era parte de la liberaci\u00f3n <code>2.1.2<\/code>pero merece una menci\u00f3n en una entrada del blog.<\/p>\n<p>Una de las ventajas de utilizar <code>RxJava<\/code> es que puede componer operadores Rx con sentido y beneficiarse de primitivas avanzadas de gesti\u00f3n de errores. Entre ellas se encuentra la funci\u00f3n <code>reintentar<\/code> y <code>reintentarCuando<\/code> que permiten reintentar un flujo as\u00edncrono en diversas condiciones.<\/p>\n<p>Por ejemplo, puede que desee reintentar un <code>consiga<\/code> solicitud al recibir <code>Contrapresi\u00f3nExcepci\u00f3n<\/code> (la velocidad a la que realiza la solicitud es demasiado alta para que el SDK\/servidor pueda soportarla) o <code>TemporaryFailureException<\/code> (el servidor notifica que est\u00e1 demasiado ocupado y que las peticiones deben retrasarse un poco). Puede que s\u00f3lo quieras reintentar hasta 4 veces, y esperar un poco antes de hacerlo... Puede que incluso quieras que este retraso crezca entre cada intento (<em>Retroceso exponencial<\/em>)?<\/p>\n<p>Anteriormente esto requer\u00eda un poco de conocimiento de Rx para implementarse, pero ya que este es un caso de uso tan com\u00fan le hemos tra\u00eddo clases de ayuda para hacerlo f\u00e1cilmente, en la clase <code>com.couchbase.client.java.util.retry<\/code> paquete.<\/p>\n<p>El ayudante puede producir un <code>Funci\u00f3n<\/code> que puede pasarse directamente a un <code>Observable<\/code>'s <code>reintentarCuando<\/code> o tambi\u00e9n puede envolver un operador <code>Observable<\/code> introduzca uno de reintento.<\/p>\n<p>Para envolver un <code>Observable<\/code>Utilice <code>Retry.wrapForRetry(...)<\/code> m\u00e9todos est\u00e1ticos. \u00c9stos le permitir\u00e1n cubrir requisitos b\u00e1sicos como reintentar durante un n\u00famero m\u00e1ximo de intentos, describir el tipo de <code>Retraso<\/code> que quieras entre intentos.<\/p>\n<p>Para casos de uso a\u00fan m\u00e1s avanzados, existe la funci\u00f3n <code>RetryBuilder<\/code> (que produce una funci\u00f3n que se pasa a Rx's <code>reintentarCuando<\/code> operador). Este constructor le permite:<\/p>\n<ul>\n<li>elegir en qu\u00e9 tipo de errores reintentar (ya sea <code>cualquiera()<\/code>, <code>anyOf(...)<\/code>, <code>allBut(...)<\/code>).<\/li>\n<li>elegir cu\u00e1ntas veces reintentar (ya sea <code>una vez()<\/code> o <code>max(n)<\/code> veces).<\/li>\n<li>personalizar el <code>Retraso<\/code> y en el que <code>Programador<\/code> para esperar (<code>delay(...)<\/code> m\u00e9todos).<\/li>\n<\/ul>\n<p>He aqu\u00ed un ejemplo completo que se ajusta al requisito expresado anteriormente:<\/p>\n<h2>Actualizaciones de dependencia<a id=\"dependencies\"><\/a><\/h2>\n<p>En esta versi\u00f3n, <code>RxJava<\/code> ha pasado a la versi\u00f3n <code>1.0.9<\/code>. Tambi\u00e9n hemos actualizado las dependencias internas (que se vuelven a empaquetar, por lo que es transparente para su aplicaci\u00f3n) a las \u00faltimas versiones de correcci\u00f3n de errores.<\/p>\n<h2>Conclusi\u00f3n<a id=\"conclusion\"><\/a><\/h2>\n<p>Esperamos que disfrute de estas nuevas funciones de la versi\u00f3n 2.2. Como siempre, agradecemos sus comentarios, especialmente sobre la funci\u00f3n de mapeo de entidades y su direcci\u00f3n. As\u00ed que vaya a jugar con \u00e9l, y nos dicen lo que piensa en el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/c\/java-sdk\/\">foros<\/a> por ejemplo.<\/p>\n<p>Para obtener la versi\u00f3n 2.2-dp, utilice lo siguiente en un pom.xml de Maven (o descargue directamente los 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> y <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>Por supuesto, tambi\u00e9n <strong>errores corregidos<\/strong> en esta vista previa para desarrolladores, que tambi\u00e9n formar\u00e1 parte de <strong>El lanzamiento oficial de la versi\u00f3n 2.1.3 est\u00e1 previsto para la pr\u00f3xima semana.<\/strong>.<\/p>\n<p>\u00a1A\u00fan no hemos terminado con la 2.2! Tendremos muchas funciones pr\u00f3ximamente, entre ellas <em>m\u00e1s<\/em> compatibilidad con N1QL, y <strong>perfiles y m\u00e9tricas integrados<\/strong>.<\/p>\n<p>\u00a1Feliz codificaci\u00f3n!<br \/>\n<br \/> - El equipo del SDK de Java<\/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\/es\/javasdk-2-2-dp\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/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\/es\/javasdk-2-2-dp\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/javasdk-2-2-dp\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Ingeniero de Software, Pivotal","image":{"@type":"ImageObject","inLanguage":"es","@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_ es un Ingeniero de Software residente en Par\u00eds que trabaja en el equipo Spring de Pivotal. Anteriormente, trabaj\u00f3 en el equipo de Couchbase Java SDK. Sus intereses abarcan aspectos de dise\u00f1o de software (OOP, patrones de dise\u00f1o, arquitectura de software), clientes ricos, lo que hay m\u00e1s all\u00e1 del c\u00f3digo (integraci\u00f3n continua, (D)VCS, mejores pr\u00e1cticas) y programaci\u00f3n reactiva. Tambi\u00e9n es editor de la versi\u00f3n francesa de InfoQ.com.","url":"https:\/\/www.couchbase.com\/blog\/es\/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_ es un Ingeniero de Software residente en Par\u00eds que trabaja en el equipo Spring de Pivotal. Anteriormente, trabaj\u00f3 en el equipo de Couchbase Java SDK. Sus intereses abarcan aspectos de dise\u00f1o de software (OOP, patrones de dise\u00f1o, arquitectura de software), clientes ricos, lo que hay m\u00e1s all\u00e1 del c\u00f3digo (integraci\u00f3n continua, (D)VCS, mejores pr\u00e1cticas) y programaci\u00f3n reactiva. Tambi\u00e9n es editor de la versi\u00f3n francesa de InfoQ.com."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1924","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1924"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1924\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1924"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}