Entradas

Cómo funcionan los reintentos en los clientes del SDK de Amazon Web Services

Recientemente, revisando código que teníamos en algunos de los servicios que estamos construyendo, nos preguntamos si tenía sentido hacer reintentos en caso de obtener una excepción al utilizar el SDK de AWS para cualquiera de sus servicios (SQS, Kinesis, SNS, etc)... y esto me llevó a revisar un poco más en detalle cómo funcionan las librerías cliente que nos proporciona Amazon. Dado que los servicios de Amazon se exponen como APIs consumibles por HTTP, cuando utilizamos las librerías del SDK para invocar a algún servicio, éstas finalmente acaban realizando una invocación HTTP... y todos sabemos que la red falla, ¿verdad? Así pues, no es ninguna sorpresa encontrarnos con que las librerías cliente de AWS realizan reintentos. Reintentos de las librerías clientes del SDK de AWS A menudo se producen errores debidos a problemas transitorios de la red o el servicio, errores que se solventarían fácilmente con un reintento de la petición y que si se trasladan al consumidor le

Revisando la jerarquía de dependencias de Spring Cloud

Imagen
Estos días he estado revisando la organización de los proyectos de Spring Cloud : cómo gestionan las dependencias, cuál es la jerarquía y las relaciones entre los proyectos a la hora de hacer las builds con Maven, etc. Spring Cloud está formado por un buen número de subproyectos (Spring Cloud Config, Spring Cloud Netflix, Spring Cloud Sleuth, ...) y se hace necesario, por un lado, controlar las dependencias transitivas de los proyectos (para alinear versiones y evitar conflictos que podrían darse si cada uno se compila con diferentes versiones de otras librerías), y por otro, ofrecer un BOM (Bill of Materials) o parent a los consumidores para que puedan utilizar los artefactos de Spring Cloud con facilidad, minimizando posibles conflictos a la hora de gestionar las versiones. A pesar de haberle echado un ojo hace ya tiempo en el trabajo me había quedado con la espina de revisar en detalle todas las dependencias y construir un mapa con las versiones exactas de los proyectos en un mome

¿Qué hay detrás de las lambdas de Java 8?

En este post trato de recoger, en español y de forma más resumida, buena parte del contenido del artículo: Java 8 Lambdas - A Peek Under the Hood . ¿Qué es una expresión lambda?  Las expresiones lambdas y el API Streams son dos de los añadidos estrella que nos trajo Java 8. Podemos explicar de forma muy sencilla qué es una expresión lambda: se trata de una función anónima , no ligada a un identificador concreto. ¿Para qué nos sirve una función anónima en Java? Pues, entre otros casos, para la infinidad de ocasiones en que hemos querido parametrizar comportamiento, pasando como parámetro a un método la lógica de una función... y en lugar de eso nos ha tocado crearnos una clase (o clase anónima) con un método conteniendo el comportamiento y pasar esa clase como argumento. Por ejemplo,  muchas APIs de Java tienen como parámetro la interfaz Comparator . Esta interfaz tiene un único método, compare , que recibe dos objetos a comparar y devuelve un entero. Si quisiéramo

Creando un proyecto con Spring Initializr: diferencias entre un empaquetado jar y un war

Imagen
Actualmente hay poca gente que no reconozca que, en el mundo del desarrollo Java, Spring Framework es un referente. Y dentro de la Plataforma Spring, Spring Boot es el proyecto con más empuje actualmente. Se lo ha ganado a pulso, claro, pues con sus starters y autoconfiguración permite arrancar un proyecto rápidamente, permitiendo centrarnos en las funcionalidades que queremos construir y minimizando la necesidad de configuraciones. Spring Initializr Pues bien, una pieza a considerar en el ámbito de Spring Boot cuando vamos a comenzar un proyecto es Spring Initializr . Este portal o servicio nos ofrece un formulario para que rellenemos los datos básicos de nuestro proyecto (nombre, groupId, artifactId, versión de Java, versión de Spring Boot...), nos permite elegir si deseamos que sea un proyecto Maven o Gradle y nos ofrece un amplio abanico de funcionalidades para que seleccionemos qué vamos a inclulir en nuestro proyecto como dependencias (¿va a ser un proyecto web?, ¿utilizarem

Post uno

Java en la Sopa aún no es nada, apenas un principio de embrión. Veamos en qué se va convirtiendo esto... Esta es la primera entrada. Aquí queda.