java


YAKC - Yet Another Kubernetes Client
Introducción En este ejemplo os mostraré cómo podéis acceder a la API REST de vuestro Kubernetes cluster desde un Pod utilizando YAKC (Yet Another Kubernetes Client), Eclipse JKube y Spring Boot. En la primera parte os enseñaré  cómo crear una aplicación muy sencilla basada en Spring Boot con la dependencia a YAKC Kubernetes Client (ver introducción a YAKC). En la segunda parte describo cómo desplegar la aplicación en un cluster de Kubernetes y cómo hacer peticiones a los endpoints REST expuestos en el Servicio del Pod para obtener información del Cluster. Aplicación de ejemplo Lo primero que haremos será crear […]

Accede al API de Kubernetes desde un Pod con Java


YAKC - Yet Another Kubernetes Client
Introducción Kubernetes v1.19.0 acaba de ser lanzado. Entre las nuevas funcionalidades y mejoras destaca la graduación del Ingress API a V1 (#1453). Pese a que los recursos de tipo Ingress se usan por la mayoría de usuarios de Kubernetes, y que esta funcionalidad se introdujo en 2015, no ha sido hasta la reciente version 1.19 en la que se ha hecho globalmente disponible. Un Ingress es “Un objeto API que gestiona acceso externo a los servicios de un cluster, normalmente HTTP”. En otras palabras, los Ingress permiten exponer públicamente los servicis gestionados por Kubernetes. En este artículo os mostraré como […]

Kubernetes 1.19 Ingress API desde Java con YAKC


Quarkus
Introducción Durante los pasados meses, mi equipo y yo hemos estado trabajando muy duro para lanzar Eclipse JKube.  JKube es el sucesor del ya obsoleto Fabric8 Maven Plugin, y como tal, nuestro principal objetivo ahora mismo es migrar aquellos proyectos que dependent de éste a JKube. GitHub proporciona muchas estadísticas y métricas, entre ellas la información acerca del grafo de dependencias del proyecto. Esta información es muy valiosa, ya que podemos averiguar qué proyectos (dentro de GitHub) dependen del nuestro. Para nuestro caso de uso de migración de usuarios, esta información es exactamente lo que necesitamos. Desafortunadamente, la API para […]

Quarkus + Picocli: Web scaper para extraer proyectos dependientes en ...



YAKC - Yet Another Kubernetes Client
Introducción Desde hace algún tiempo, soy uno de los miembros del equipo que se encarga del mantenimiento de Fabric8 Kubernetes Client, uno de los clientes Java más populares para Kubernetes y OpenShift. Fabric8 Kubernetes Client es una de las mejores opciones disponibles ya que nos permite hacer la mayoría de operaciones soportadas por kubectl desde Java con una API muy elegante y fluida. No obstante, acceder a las operaciones de bajo nivel de la API REST o a una versión específica de la API es complicado, ya que el cliente de Fabric8 no lo permite (de momento). Este es el principal […]

Kubernetes Client for Java: Presentando YAKC


Quarkus + GraalVM + Fabric8 Maven Plugin
Introducción En este tutorial veremos como desarrollar una aplicación muy sencilla con Quarkus e integrarla con Fabric8 Maven Plugin para publicar una imagen nativa con  GraalVM en Docker Hub. La primera parte de la publicación describe como desrrollar una simple aplicación con Quarkus. La siguiente parte describe como construir un ejecutable nativo con GraalVM. La última sección muestra como integrar el proyecto con Fabric8 Maven Plugin y cómo desplegar las diferentes imágenes de la aplicación en Docker Hub. Quarkus, aplicación de muestra En esta sección se muestra cómo desarrollar una aplicación muy sencilla que devolverá una cita al azar cada […]

Quarkus + Fabric8 Maven Plugin + GraalVM


Introducción Esta es la segunda publicación en la seria acerca de Spring Bean Scopes. En el tutorial anterior vimos que cuando se inyectaban Beans de ámbito Prototype dentro de un Singleton  aparecían algunas trabas. El principal problema es que las dependencias Autowired se inyectan en el Singleton cuando este se instancia (evento que ocurre una sola vez) por lo que aunque el Bean inyectado se haya declarado como Prototype, en realidad se comportará como un Singleton. El siguiente código resalta este comportamiento: [crayon-5f9d34ed01e27093283155/] En el ejemplo anterior, a pesar de que el objeto devuelto por el método getAutowiredSample se ha declarado como un […]

Spring Bean Scopes: Singleton con Prototypes



Java 10
Introducción Como probablemente ya sabrás, Java 10 se liberó el pasado 20 de marzo siguiendo el nuevo programa para liberar versiones cada 6 meses. Esta versión viene tras el lanzamiento de Java 9 el pasado septiembre de 2017 y deja esta última version obsoleta. Java 11 se liberará como una versión de soporte prolongado (LTS) y tendrá un periodo de vida mucho más amplio, pero hasta entonces, veamos cuáles son algunas de las nueva funcionalidades en Java 10. Versionado de lanzamientos basado en tiempo Java 10 introduce el nuevo versionado basado en tiempo (JEP 322) que es una reestructuración de JEP 223 liberado en Java […]

Java 10: Probando las nuevas funcionalidades


Java 8 Streams
Introducción En esta publicación veremos como emplear los streams introducidos en Java 8 para obtener un Map a partir de un List. Los mapas son estructuras de datos compuestas por una colección de elementos clave-valor de forma que una clave sólo puede existir de forma única dentro de la colección. Esto nos permite realizar búsquedas de elementos de forma muy rápida a partir de su clave sin necesidad de recorrer la colección completa. Es muy común que al enfrentarnos con algún problema partamos de una lista de elementos y queramos obtener un mapa de forma que podamos optimizar el algoritmo […]

Java 8 Streams: Convertir List en Map


Spring-Data + MongoDB
Introducción Spring Data facilita mucho el proceso de trabajo con entidades de datos y ofrece una implementación específica para MongoDB. Se pueden definir consultas simplemente creando interfaces con métodos que siguen una convención de nombres o anotándolos con @Query y Spring automágicamente generará una implementación por nosotros. En la mayoría de ocasiones esto nos bastará para operaciones CRUD o de consultas sencillas y no será necesario definir métodos adicionales. Esto nos permitirá finalizar el desarrollo de la aplicación o de la funcionalidad de acceso a datos de forma muy rápida sin tener que escribir código repetitivo. Sin embargo, en muchas ocasiones […]

Spring Data MongoDB: Implementación de un repositorio a medida



5
Introducción Tras la ejecución de alguna herramienta de análisis estático de código o analizando el código desde algún IDE, es posible muy probable haberse topado con un mensaje en relación a los campos @Autowired: Field injection is not recommended Esta publicación muestra los distintos tipos de inyección disponibles en Spring y cuáles son los patrones de uso recomendados para cada uno de ellos. Tipos de Inyección A pesar de que la documentación actual de  Spring Framework (5.0.3) únicamente define dos tipos de inyección, en realidad hay tres: Inyección de dependencias basada en el constructor (Constructor-based) Inyección de dependencias basada en […]

Inyección de campos desaconsejada “Field injection is not recommended” – ...


Introducción En este tutorial se muestran los distintos ámbitos (Scopes) para un Bean que podemos encontrar en Spring Framework. Es prioritario entender que la definición de un Bean no es más que una receta para crear instancias de una clase de acuerdo con dicha definición. Partiendo de esta base, se puede asumir que la misma receta para crear instancias de una clase se puede emplear en múltiples ocasiones o varias veces durante el ciclo de vida de una aplicación. Una de las características que permite Spring configurar en la definición de los Beans es el Scope o ámbito de los […]

Spring Bean Scopes: Guía para comprender los distintos scopes (ámbitos) ...


Introducción En este post mostraré cómo asignar un valor de una secuencia incrementada de forma automática a un campo empleando una colección de mongo. Para ello emplearemos la misma técnica que se muestra en el tutorial de mongodb.com pero con métodos puramente Java. Es importante reseñar que este valor no debería de emplearse como identificador único del documento, Mongo ya dispone de mejores métodos para asignar identificadores a documentos, y por lo general sería una mala práctica. Por otro lado, en sistemas distribuidos o en bases de datos con una enorme cantidad de documentos, tampoco debería de emplearse esta metodología. […]

Spring-data + Mongo: Secuencia autoincremental en MongoDB mediante un servicio ...