Cuando empezamos un nuevo proyecto, una tarea recurrente y que nos insume un tiempo considerable es hacer el setup del proyecto y del entorno. Decidir qué tecnologías vamos a usar, con qué arquitectura inicial vamos a encarar la solución, setear los distintos entornos, crear los scripts de build y resolver las dependencias, son algunos de los desafíos, no menores, que tenemos que enfrentar.

Yeoman + Spring Boot + Angular = JHipster

¿Y si podríamos hacer todo esto en unos pocos minutos?
JHipster es un generador de Yeoman, que usa Spring Boot y Angular para crear aplicaciones web sin hacer mas que responder 15 preguntas sencillas.

El objetivo de JHipster es generar una Aplicación Web completa y moderna utilizando:
JHipster utiliza las siguientes tecnologías en la aplicación que genera:

Back-end

JHipster: tecnologías server-side

  • Spring Boot
  • Maven or Gradle para realizar el build, correr los test y ejecutar la aplicación (con perfiles para producción y desarrollo)
  • Spring Security
  • Spring MVC REST + Jackson
  • Spring WebSocket (opcional)
  • Spring Data JPA + Bean Validation
  • Actualizaciones de bases de datos con Liquibase
  • Elasticsearch si se quiere dar capacidades de busqueda en la base de datos.
  • MongoDB en caso de querer usar bases de datos NoSQL orientada a documentos.
  • Cassandra en caso de querer usar bases de datos NoSQL orientada a columnas.
  • Apache Kafka en caso de querer usar un sistema de mensajería suscripción-publicación

Front-end

JHipster: tecnologías client-side

Para poder utilizar Yeoman debemos tener instalado NPM o Yarn. En este caso en particular utilizaremos NPM en PowerShell. Además, debemos tener instalado el Java JDK, para poder compilar el proyecto Java generado.
> npm install -g yeoman
> npm install -g generator-jhipster

Nota: si decidimos usar AngularJs v1.x necesitamos instalar también Bower y Gulp.

Una vez instalado todo, debemos crear un nuevo directorio para nuestra aplicación y ejecutar allí el generador de JHipster. Es aquí donde las preguntas empiezan.
> mkdir jhipster-folderitech-app
> cd jhipster-folderitech-app
> yo jhipster

Las 15 preguntas que el generador nos hace son las siguientes:

  • Que tipo de aplicación te gustaría crear?
    • Aplicación monolítica (por defecto)
    • Aplicación basada en microservicios
    • Gateway de microservicios
    • JHipster UAA
  • Cual es el nombre de la aplicación?
  • Cual es el nombre de los paquetes de java? (por ejemplo: com.company.projectname)
  • Que tipo de autenticación te gustaría usar?
    • Autenticación clasica basada en sesiones
    • Usando OAuth 2.0
    • Usando JWT
  • Que tipo de base de datos te gustaría usar?
    • Una base de datos SQL (MySQL, PostgreSQL, etc) usando Spring Data JPA
    • MongoDB
    • Cassandra
  • Que base de datos te gustaría usar en producción? Aquí encontraremos la mayoría de las base de datos
  • Que base de datos te gustaría usar en desarrollo?
    • H2, en memoria
    • H2, con un archivo
    • La misma que se seleccionó para producción
  • Querés usar la caché de segundo nivel de Hibernate?
    • No
    • Usar ehcache (cache local)
    • Usar Hazelcast (cache distribuida)
  • Te gustaría usar Maven o Gradle?
  • Que otras tecnologías te gustaría usar?
    • Social login
    • Search engine usando ElasticSearch
    • Sesiones HTTP en Clusters utilizando Hazelcast
    • WebSockets utilizando Spring Websockets
    • Mensajes asincronicos usando Apache Kafka
  • Qué framework te gustaría usar para el cliente
    • AngularJS version 1.x
    • Angular version 2+
  • Te gustaría usar SaaS?
  • Que framework de testing te gustaría usar?

Luego de terminar de responder las preguntas, se genera todo el código y la estructura del proyecto y se bajan todas las dependencias. Una vez terminado el proceso el generador nos da los comandos para correr la aplicación de Java y el cliente.
Y así es como conseguimos que la primera versión de nuestra nueva aplicación esté corriendo en su entorno de desarrollo.

La primera versión de nuestra aplicación corriendo

Si abrimos el directorio de la aplicación con Visual Studio Code, podemos ver la estructura del proyecto y todos los archivos generados.

Estructura del proyecto en Visual Studio Code

Pero eso no es todo, podemos ir mucho mas allá de crear la aplicación. JHipster permite ir enriqueciendo la aplicación, y con la misma facilidad con la que es creada. Nuevamente, ejecutando un simple comando, podemos agregar una nueva entidad a la aplicación:
> yo jhipster:entity <entityName>

Al crear una nueva entidad, JHipster genera lo siguiente:

  • Una tabla en la base de datos
  • Un changeset en Liquibase
  • Una entidad JPA
  • Un repositorio con Spring Data JPA
  • Un Controller REST con Spring MVC, con las operaciones CRUD básicas
  • Un router, un componente y un servicio de Angular
  • Una vista HTML
  • Tests de integración
  • Tests de performance
Además de usar la consola, JHipster provee un lenguaje de alto nivel: JDL (JHipster Description Language), basado en JSON, para poder describir las entidades y las relaciones entre ellas. También tenemos disponible JDL Studio, una aplicación web que permite crear visualmente, utilizando diagrama de clases, las entidades y las relaciones entre ellas. Por ultimo, se puede utilizar un archivo JDL para generar entidades masivamente.

JDL Studio

Como conclusión podemos decir que, si bien sabemos que estas herramientas que contienen soluciones genéricas nunca van a reemplazar el trabajo de los programadores y los arquitectos, sin dudas pueden ser un gran punto de partida para una nueva aplicación.