lunes, 19 de diciembre de 2016

Como Generar Entidades a partir del Modelo

Después de generar una aplicación con JHipster, esta se encontrá vacia de contenido a no ser que generemos entidades, tendrá la funcinalidad básica, control de acceso, autentificación y autorización, tendrá implementada la internacionalización, etc. pero no podremos hacer mucho más porque no contamos con entidades.

Para generar entidades tenemos dos opciones:

Generar las entidades una a una.

Con el siguiente comando:
yo jhipster:entity EntityName
Donde EntityName es el nombre de la entidad que queremos generar,  jhipster nos preguntará si queremos añadir campos a esta entidad, el nombre del campo, el tipo, si queremos validaciones básicas sobre este campo, como que sea obligatorio, o una longitud mínima, si queremos relaciones con otras entidades.

En lo que a la interfaz de usuario se refiere nos preguntará si queremos paginación y de que tipo.

Y en lo que a la arquitectura se refiere nos preguntará si queremos crear un DTO (Data transefer Object, o Objeto de Transferencia de Datos) o si queremos usar la entidad directamente.

Finalmente nos informará de los ficheros que genera.


~$ yo jhipster:entity entity
The entity entity is being created.

Generating field #1
? Do you want to add a field to your entity? Yes
? What is the name of your field? field1
? What is the type of your field? String
? Do you want to add validation rules to your field? Yes
? Which validation rules do you want to add? Required, Minimum length
? What is the minimum length of your field? 10
================= Entity =================
Fields
field1 (String) required minlength='10'

Generating field #2
? Do you want to add a field to your entity? No
================= Entity =================
Fields
field1 (String) required minlength='10'

Generating relationships to other entities
? Do you want to add a relationship to another entity? Yes
? What is the name of the other entity? user
? What is the name of the relationship? user
? What is the type of the relationship? one-to-one
================= Entity =================
Fields
field1 (String) required minlength='10'
Relationships
user (User) one-to-one

Generating relationships to other entities
? Do you want to add a relationship to another entity? No
================= Entity =================
Fields
field1 (String) required minlength='10'
Relationships
user (User) one-to-one


? Do you want to use a Data Transfer Object (DTO)? No, use the entity directly
? Do you want to use separate service class for your business logic? No, the REST controller should use the repository
directly
? Do you want pagination on your entity? Yes, with a simple pager
Everything is configured, generating the entity...
   create .jhipster\Entity.json
   create src\main\resources\config\liquibase\changelog\20161208212848_added_entity_Entity.xml
   create src\main\resources\config\liquibase\changelog\20161208212848_added_entity_constraints_Entity.xml
 conflict src\main\resources\config\liquibase\master.xml
? Overwrite src\main\resources\config\liquibase\master.xml? overwrite this and all others
    force src\main\resources\config\liquibase\master.xml
   create src\main\java\com\jlg\basketshop\domain\Entity.java
   create src\main\java\com\jlg\basketshop\repository\EntityRepository.java
   create src\main\java\com\jlg\basketshop\repository\search\EntitySearchRepository.java
   create src\main\java\com\jlg\basketshop\web\rest\EntityResource.java
    force src\main\resources\ehcache.xml
   create src\main\webapp\app\entities\entity\entities.html
   create src\main\webapp\app\entities\entity\entity-detail.html
   create src\main\webapp\app\entities\entity\entity-dialog.html
   create src\main\webapp\app\entities\entity\entity-delete-dialog.html
    force src\main\webapp\app\layouts\navbar\navbar.html
   create src\main\webapp\app\entities\entity\entity.state.js
   create src\main\webapp\app\entities\entity\entity.controller.js
   create src\main\webapp\app\entities\entity\entity-dialog.controller.js
   create src\main\webapp\app\entities\entity\entity-delete-dialog.controller.js
   create src\main\webapp\app\entities\entity\entity-detail.controller.js
   create src\main\webapp\app\entities\entity\entity.service.js
   create src\main\webapp\app\entities\entity\entity.search.service.js
   create src\main\webapp\i18n\en\entity.json
    force src\main\webapp\i18n\en\global.json
   create src\main\webapp\i18n\es\entity.json
    force src\main\webapp\i18n\es\global.json
   create src\test\javascript\spec\app\entities\entity\entity-detail.controller.spec.js
   create src\test\java\com\jlg\basketshop\web\rest\EntityResourceIntTest.java
   create src\test\gatling\simulations\EntityGatlingTest.scala
Running gulp Inject to add javascript to index

Generar todas las entidades y sus relaciones de golpe a partir de una representación del modelo.

La otra forma de generar las entidades, es utilizar jdl-studio para diseñar el modelo, entidades y relaciones, exportar ese modelo a un fichero en formato json, y después utilizar ese fichero como entrada para generar todas las entidades de una sóla vez.




Este este es el diagrama ejemplo que podemos encontrar en jdl- studio.

A mi esta herramienta me gusta bastante, a medida que diseñas las entidades mediante la edición de texto, puedes ver la representación en la parte de la derecha, por ejemplo, la entidad Empleado tiene la siguiente pinta:

entity Employee {
/**
* The firstname attribute.
*/
firstName String,
lastName String,
email String,
phoneNumber String,
hireDate ZonedDateTime,
salary Long,
commissionPct Long
}

Una vez que estamos contentos con el modelo, sólo tenemos que descargar el fichero y utilizar el comando:

yo jhipster:import-jdl jhipster-jdl.jh

En este caso he llamado al fichero con el modelo, "jhipster-jdl.jh".




jueves, 1 de diciembre de 2016

Video Demostración de JHipster


En este vídeo muestro la potencia de JHipster, como generar una aplicación con tecnologías a medida. En concreto en este vídeo se utilizan:

  • OAuth2
  • H2 y MySQL BBDD
  • Hibernate
  • Spring y Spring Boot
  • Gradle
  • Saas y LibSaas
  • Gatling
  • Angularjs
  • gulp


















Posteriormente se crea el modelo utilizando como entrada un fichero donde especifican las entidades que se quieren generar, pero ya hablaremos de este proceso en sucesivos post.

Y para finalizar se hace una pequeña demostración de la aplicación generada.