Generador de super-pojos

El generador de super-pojos aparece como necesidad para tener una lógica de negocio común o casi común a diferentes versiones de la misma interfaz de Open Api.

Descripción

El código compartido, incluye:

  • El generador de super-pojos de interfaz de comandos (en la versión de 20241101, sólo funciona con java-8)
  • La librería que implementa una versión del mapeador para traducir de super-pojos a pojos y viceversa.

Descripción del código

  • El generador de super-pojos:
    • Hace uso de reflexión para obtener los atributos de los pojos
    • Se ofrecen distintas opciones de generación:
      • Elegir la expresión regular para identificar getters y setters
      • Añadir toString
      • Añadir hashcode y equals
      • Añadir estilo builder
      • Añadir adicionador de elementos para las listas
      • ...
    • Se hace uso de la librería jcodemodel para generar el código
  • La librería de mapeos:
    • Hace uso de reflexión para identificar los atributos a traducir
    • Se usa una caché para no tener que repetir la inspección de reflexión una y otra vez
    • Se permite añadir traductores manuales al mapeador
    • Se hace una traducción recursiva de cada parámetro de un pojo a otro

La traducción por reflexión es lenta y, si hay muchas peticiones, puede ser un cuello de botella.

En las pruebas que he hecho (con una tasa de varios cientos de peticiones por segundo), se ve que la ejecución se atasca durante los primeros segundos.

Tras ese tiempo, va rapidísimo.

Es posible que eso ocurra:

  • Porque al inicio la caché está todavía sin poblar.
  • Porque tras ese tiempo entra en juego el optimizador al vuelo de la JVM (JIT, just in time), que traduce el código más frecuente a un código máquina muy optimizado.

Si se quiere que no haya tiempos lentos al principio, se puede pensar en precalentar la ejecución antes de abrir los puertos a la escucha.

Pantallas

Generador de super-pojos (2024)

Descargar

Versiones

image

El generador de super pojos nace como necesidad de unificar diferentes versiones de modelos de pojos, para tratar de ofrecer una lógica común a todas las versiones.

Puedes ver más detalles de la aplicación y de la librería asociada en el proyecto superpojo-model de github

Descargas