gvNIX - Documentación de Referencia 1.4.1

222
gvNIX - Documentación de referencia 1.4.1.RELEASE Copyright 2010 - 2013 Consejería de Infraestructuras, Transporte y Medio Ambiende - Generalidad Valenciana Esta obra está bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0 España http://creativecommons.org/licenses/by-sa/3.0/es/ de Creative Commons. Puede copiarla, distribuirla y comunicarla públicamente siempre que especifique sus autores y comparta cualquier obra derivada bajo la misma licencia. La licencia completa se puede consultar en http://creativecommons.org/licenses/by-sa/3.0/es/

description

gvNIX - Documentación de Referencia 1.4.1.RELEASE

Transcript of gvNIX - Documentación de Referencia 1.4.1

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE

    Copyright 2010 - 2013 Consejera de Infraestructuras, Transporte y Medio Ambiende - GeneralidadValenciana Esta obra est bajo la licencia Reconocimiento-Compartir bajo la misma licencia 3.0 Espaahttp://creativecommons.org/licenses/by-sa/3.0/es/ de Creative Commons. Puede copiarla, distribuirla y

    comunicarla pblicamente siempre que especifique sus autores y comparta cualquier obra derivada bajo lamisma licencia. La licencia completa se puede consultar en http://creativecommons.org/licenses/by-sa/3.0/es/

  • 1.4.1.RELEASE ii

    I. Primeros pasos con gvNIX .... 11. Introduccin .... 2

    1.1. Qu es gvNIX? .... 21.2. Qu es Spring Roo? .... 21.3. Qu ofrece gvNIX? .... 31.4. Arquitectura .... 31.5. El intrprete de comandos .... 41.6. Cmo funciona? .... 51.7. Generacin de cdigo .... 6

    2. Instalacin de gvNIX .... 72.1. Requisitos previos .... 7

    2.1.1. Configuracin del entorno .... 72.1.2. Acceso a travs de un proxy .... 8

    2.2. Descarga e instalacin de gvNIX .... 93. Desarrollo con Eclipse .... 12

    3.1. Instalacin .... 123.1.1. STS como distribucin .... 123.1.2. STS como plugin .... 123.1.3. Integrar soporte ROO en STS .... 13

    3.2. Consola gvNIX / Roo integrada en Eclipse .... 133.3. Utilizar Eclipse como IDE .... 15

    3.3.1. Crear proyecto gvNIX en Eclipse IDE .... 153.3.2. Importar proyecto gvNIX en Eclipse .... 16

    3.4. Generacin de pruebas de integracin .... 173.5. Arrancar la aplicacin con Eclipse .... 17

    3.5.1. Mostrar la Vista de Servidores en Eclipse .... 173.5.2. Crear un nuevo Servidor .... 183.5.3. Ajustar la configuracin del Servidor .... 183.5.4. Ejecucin de la aplicacin en el Servidor .... 19

    3.6. Trabajando con el cdigo de la aplicacin en Eclipse .... 213.6.1. Modificacin del cdigo generado .... 22

    4. Ejemplos gvNIX/Roo .... 24II. Desarrollo de aplicaciones con gvNIX .... 26

    5. Crear una nueva aplicacin .... 275.1. Crear un nuevo proyecto .... 27

    6. Gestin del acceso a datos .... 296.1. Persistencia de objetos .... 296.2. Configurar la conexin con la base de datos .... 30

    6.2.1. jpa setup .... 306.2.2. database properties .... 326.2.3. Ejemplo: Conectar con PostgreSQL .... 326.2.4. Actualizacin automtica del esquema .... 336.2.5. Mltiples fuentes de datos .... 34

    7. Cdigo generado por gvNIX/Roo .... 367.1. Clases Java y ficheros AJ .... 36

    7.1.1. Archivos Java .... 367.1.2. Archivos AJ .... 36

    8. Gestin de entidades .... 378.1. Crear una entidad con el intrprete de comandos .... 38

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE iii

    8.1.1. Comando entity jpa .... 388.1.2. Comando field .... 398.1.3. Proyecto ejemplo .... 40

    8.2. Crear una entidad con un IDE .... 428.3. Modificar una entidad .... 428.4. Identificadores compuestos .... 438.5. Definir caractersticas especficas para el modelo relacional .... 44

    8.5.1. Definir un nombre de tabla .... 448.5.2. Definir un nombre de columna .... 448.5.3. Campos calculados .... 458.5.4. Clave primaria .... 468.5.5. Campo para el control de concurrencia optimista. .... 478.5.6. Regeneracin de la Base de datos en cada arranque. .... 488.5.7. Creacin de una nueva entidad sin comandos .... 48

    8.6. Ingeniera inversa de entidades .... 498.6.1. Instalacin del driver JDBC .... 498.6.2. Comandos de la ingeniera inversa .... 508.6.3. Anotacin @RooDbManaged .... 528.6.4. Soporte de funcionalidades JPA 2.0 .... 528.6.5. Ingeniera inversa multi esquema .... 538.6.6. Ingeniera inversa incremental .... 538.6.7. Ingeniera inversa de vistas .... 54

    9. Buscadores de entidades .... 569.1. Descripcin .... 569.2. Listar buscadores .... 569.3. Creacin de un buscador .... 569.4. Cdigo generado .... 57

    10. Pruebas de integracin .... 5910.1. Creacin de pruebas de integracin .... 59

    11. Gestin de la capa web .... 6011.1. Crear la capa web con el intrprete de comandos .... 60

    11.1.1. web mvc setup .... 6011.1.2. web mvc scaffold .... 6011.1.3. web mvc all .... 6111.1.4. web mvc controller .... 6111.1.5. Proyecto ejemplo .... 62

    11.2. Crear la capa web con un IDE .... 6211.2.1. Controlador a medida .... 6311.2.2. Controlador CRUD .... 6311.2.3. Cdigo generado en las vistas de la capa web .... 64

    11.3. Visualizacin de entidades en la capa web .... 6811.4. Mejoras de renimiento .... 68

    12. Buscadores en la capa web .... 6912.1. Descripcin .... 6912.2. Creacin de buscadores .... 6912.3. Cdigo generado .... 69

    13. Arranque y pruebas de la aplicacin web .... 7113.1. Pruebas funcionales .... 7113.2. Arrancar la aplicacin web .... 71

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE iv

    13.3. Ejecutar los tests funcionales .... 7114. Mejoras de rendimiento .... 73

    14.1. Descripcin .... 7314.2. Patrones de conversin ptimos en el log .... 7314.3. Evitar la carga de listas de valores innecesarias .... 73

    III. Desarrollo avanzado con gvNIX .... 7515. Add-on Theme Manager .... 76

    15.1. Descripcin .... 7615.2. Temas disponibles por defecto. .... 7615.3. Futuras versiones .... 77

    16. Add-on Web Menu .... 7816.1. Descripcin .... 7816.2. Definiciones .... 7816.3. Instalacin de la gestin del men .... 7916.4. Modificacin del men. .... 7916.5. Futuras versiones .... 80

    17. Add-on JPA .... 8117.1. Servicios persistencia en bloque .... 8117.2. Informacin adicional para bsquedas por relaciones .... 8217.3. Auditora y resgistro de cambios de entidades .... 83

    17.3.1. Configurar detalles de usuario .... 8317.3.2. Auditora bsica de entidades .... 8317.3.3. Auditora y registro de cambios de entidades .... 8417.3.4. Proveedor de registro de cambios Hibernate Envers .... 86

    17.4. Persistencia de entidades con campos de tipo geogrfico .... 8717.4.1. Configuracin del proyecto para soporte geogrfico .... 8717.4.2. Aadir campos de tipo geogrfico a entidades .... 8717.4.3. Implementacin de buscadores para campos GEO .... 88

    18. Add-on Monitoring .... 8918.1. Descripcin .... 8918.2. Instalacin de la monitorizacin .... 8918.3. Monitorizando a travs de Spring .... 8918.4. Accediendo a la monitorizacin .... 89

    19. Add-on Web MVC .... 9019.1. Interfaz para operaciones de persistencia en bloque .... 90

    19.1.1. Mtodos de creacin y actualizacin .... 9019.1.2. Mtodo de eliminacin .... 9119.1.3. Carga de datos en formato JSON .... 91

    19.2. Visualizacin con jQuery .... 9219.2.1. Conversin de las vistas a jQuery .... 92

    20. Add-on Bootstrap .... 9320.1. Descripcin .... 9320.2. Instalacin de Bootstrap 3 .... 9320.3. Actualizacin de componentes .... 9320.4. Apendice de comandos .... 93

    21. Add-on Web MVC Datatables .... 9421.1. Descripcin .... 9421.2. Instalacin del soporte para Datatables .... 9521.3. Usar datatables en la vista "list" de un controlador. .... 95

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE v

    21.4. Ajustar la configuracin del datatables de una vista. .... 9621.5. Cambiar el modo de datos de Datatables. .... 9621.6. El control de bsqueda y filtros por columnas. .... 9621.7. Filtros Simples .... 9721.8. Modo visualizacin de registro. .... 9821.9. Visualizacin de detalles. .... 9821.10. Eliminacin mltiple. .... 9921.11. Edicin en lnea. .... 9921.12. Registro creado en primera posicin .... 10021.13. Registro editado en primera posicin .... 10021.14. Registro seleccionado siempre visible .... 100

    22. Add-on Web MVC GEO .... 10222.1. Descripcin .... 10222.2. Instalacin del soporte para vista de Mapa .... 10222.3. Generar vista de Mapa .... 10322.4. Generar campos de mapa en vistas CRU .... 10322.5. Aadir entidades a la vista de Mapa .... 10322.6. Aadir Capas Base la vista de Mapa .... 10422.7. Generar nuevas herramientas en la vista del Mapa .... 104

    23. Add-on Campos Lupa .... 10523.1. Descripcin .... 10523.2. Instalacin del componente lupa .... 10523.3. Permitiendo a una entidad utilizar el campo lupa .... 10523.4. Utilizando componentes lupa .... 10523.5. Actualizando componentes lupa .... 10523.6. Apendice de comandos .... 105

    24. Add-on Web Screen Patterns .... 10624.1. Descripcin .... 10624.2. Instalacin .... 10624.3. Creacin de un patrn .... 107

    24.3.1. Creacin de un patrn maestro .... 10824.3.2. Creacin de un patrn detalle .... 109

    24.4. Tipos de patrones .... 11024.4.1. Tabular .... 11024.4.2. Tabular con edicin registro .... 11224.4.3. Registro .... 114

    25. Add-on OCC (Optimistic Concurrency Control) .... 11625.1. Introduccin .... 11625.2. Aadir el control en las entidades .... 116

    26. Add-on Web Dialog .... 11926.1. Descripcin .... 11926.2. Instalacin .... 11926.3. Excepciones controladas por gvNIX .... 119

    26.3.1. Aadir nuevas excepciones a la gestin .... 12026.4. Nuevos dilogos modales .... 121

    26.4.1. Ejemplos de dialogos personalizados .... 12226.5. Futuras versiones .... 125

    27. Add-on CIT Security .... 12627.1. Descripcin .... 126

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE vi

    28. Add-on GVA Security .... 12828.1. Descripcin .... 128

    29. Add-on Web Report .... 13029.1. Descripcin .... 13029.2. Instalacin .... 13029.3. Generacin de un informe .... 13229.4. Futuras versiones .... 134

    30. Add-on Service .... 13530.1. Descripcin .... 13530.2. Creacin de servicios locales .... 13530.3. Creacin de servidores desde Java .... 13630.4. Creacin de servidores desde WSDL .... 13730.5. Creacin de clientes .... 13830.6. Acceso a un WSDL en un servidor seguro .... 139

    30.6.1. Creacin de clientes con firma .... 14030.7. Listar los servicios .... 141

    31. Add-on Web MVC i18n .... 14231.1. Descripcin .... 14231.2. Instalacin de un idioma .... 14231.3. Futuras versiones .... 142

    32. Add-on Dynamic Configuration .... 14332.1. Descripcin .... 14332.2. Funcionalidad .... 14332.3. Mejoras de renimiento .... 14632.4. Futuras versiones .... 146

    33. Add-on Web MVC Binding .... 14833.1. Descripcin .... 14833.2. Futuras versiones .... 149

    34. Working with the Flex Addon for Spring Roo .... 15034.1. Introduction .... 150

    34.1.1. Flex Addon for Spring Roo Features .... 15034.1.2. Flex Commands .... 15034.1.3. Building and Running a Flex Addon Project .... 15334.1.4. Running the Sample Roo Script .... 15334.1.5. Known Issues .... 154

    IV. Recetas de desarrollo .... 15535. Recetas .... 156

    35.1. Repositorios Maven .... 15635.2. Desarrollo de buscadores con gran cantidad de campos .... 15635.3. Campos opcionales en los buscadores .... 15735.4. Instalar fuentes de letra para los informes .... 15935.5. Diseo de informes con sub informes .... 16035.6. Operaciones durante el inicio de la aplicacin .... 16735.7. Obtener el BindStatus de un atributo dentro de un formulario .... 167

    V. Apndices .... 16936. Apndice de comandos de gvNIX .... 170

    36.1. Comandos del add-on OCC .... 17036.1.1. occ checksum set .... 17036.1.2. occ checksum all .... 170

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE vii

    36.2. Comandos del add-on JPA .... 17136.2.1. jpa gvnix setup .... 17236.2.2. jpa batch add .... 17236.2.3. jpa batch all .... 17236.2.4. jpa audit setup .... 17236.2.5. jpa audit add .... 17336.2.6. jpa adudit all .... 17336.2.7. jpa adudit revisionLog .... 17336.2.8. jpa geo setup .... 17336.2.9. field geo .... 17436.2.10. finder geo all .... 17436.2.11. finder geo add .... 174

    36.3. Comandos del add-on Theme Manager .... 17536.3.1. theme install .... 17536.3.2. theme set .... 17536.3.3. theme list .... 176

    36.4. Comandos del add-on Web Dialog .... 17636.4.1. web mvc dialog setup .... 17636.4.2. web mvc dialog exception list .... 17736.4.3. web mvc dialog exception add .... 17736.4.4. web mvc dialog exception set language .... 17836.4.5. web mvc dialog exception remove .... 17836.4.6. web mvc dialog add .... 178

    36.5. Comandos del add-on Web Menu .... 17936.5.1. menu setup .... 17936.5.2. menu entry add .... 17936.5.3. menu entry visibility .... 18036.5.4. menu entry roles .... 18136.5.5. menu entry move .... 18136.5.6. menu entry update .... 18136.5.7. menu entry info .... 18236.5.8. menu tree .... 183

    36.6. Comandos del add-on Web Screen Patterns .... 18436.6.1. web mvc pattern setup .... 18436.6.2. web mvc pattern update tags .... 18436.6.3. web mvc pattern master .... 18536.6.4. web mvc pattern detail .... 185

    36.7. Comandos del add-on GVA Security .... 18636.7.1. security provider add .... 187

    36.8. Comandos del add-on CIT Security .... 18736.8.1. cit security setup .... 187

    36.9. Comandos del add-on Web Report .... 18836.9.1. web report setup .... 18836.9.2. web report add .... 188

    36.10. Comandos del add-on Service .... 18936.10.1. remote service class .... 19036.10.2. remote service operation .... 19036.10.3. remote service define ws .... 19036.10.4. remote service export operation .... 191

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE viii

    36.10.5. remote service list operation .... 19336.10.6. remote service export ws .... 19336.10.7. remote service import ws .... 19336.10.8. remote service ws list .... 19436.10.9. remote service security ws .... 194

    36.11. Comandos del add-on Web MVC i18n .... 19536.11.1. web mvc install language .... 195

    36.12. Comandos del add-on Dynamic Configuration .... 19536.12.1. configuration create .... 19536.12.2. configuration property add .... 19636.12.3. configuration property value .... 19636.12.4. configuration property undefined .... 19636.12.5. configuration list .... 19736.12.6. configuration export .... 197

    36.13. Comandos del add-on Web MVC Binding .... 19736.13.1. web mvc binding stringTrimmer .... 197

    36.14. Comandos del add-on Web MVC .... 19836.14.1. web mvc batch setup .... 19836.14.2. web mvc batch add .... 19836.14.3. web mvc batch all .... 19836.14.4. web mvc jquery setup .... 19836.14.5. web mvc jquery update tags .... 19936.14.6. web mvc jquery add .... 19936.14.7. web mvc jquery all .... 199

    36.15. Comandos del add-on WEB MVC Bootstrap .... 19936.15.1. web mvc bootstrap setup .... 19936.15.2. web mvc bootstrap update .... 200

    36.16. Comandos del add-on Web MVC Datatables .... 20036.16.1. web mvc datatables setup .... 20036.16.2. web mvc datatables update tags .... 20136.16.3. web mvc datatables add .... 20136.16.4. web mvc datatables all .... 20136.16.5. web mvc datatables details add .... 201

    36.17. Comandos del add-on Web MVC GEO .... 20236.17.1. web mvc geo setup .... 20236.17.2. web mvc geo controller .... 20236.17.3. web mvc geo field .... 20336.17.4. web mvc geo entity all .... 20336.17.5. web mvc geo entity add .... 20436.17.6. web mvc geo tilelayer .... 20436.17.7. web mvc geo wmslayer .... 20436.17.8. web mvc geo tool measure .... 20636.17.9. web mvc geo tool custom .... 206

    36.18. Comandos del add-on WEB MVC Lupa .... 20736.18.1. web mvc loupe setup .... 20736.18.2. web mvc loupe set .... 20836.18.3. web mvc loupe field .... 20836.18.4. web mvc loupe update .... 209

    36.19. Comandos del add-on Monitoring .... 209

  • gvNIX - Documentacin de referencia

    1.4.1.RELEASE ix

    36.19.1. monitoring setup .... 20936.19.2. monitoring all .... 20936.19.3. monitoring add class .... 20936.19.4. monitoring add method .... 21036.19.5. monitoring add package .... 210

    VI. Recursos .... 21137. Recursos .... 212

    37.1. Proyectos relacionados con gvNIX .... 21237.2. Recursos de Spring Roo .... 21237.3. Recursos de libreras relacionadas .... 212

  • 1.4.1.RELEASE 1

    Parte I. Primeros pasos con gvNIXEsta parte de la documentacin contiene la informacin necesaria para entender qu es gvNIX y cmo empezara utilizarlo.

  • 1.4.1.RELEASE 2

    Captulo 1. Introduccin1.1. Qu es gvNIX?

    gvNIX es un entorno de trabajo Java de cdigo abierto para el desarrollo rpido de aplicaciones webaltamente productivo, flexible y que no compromete la calidad de los proyectos.

    Est compuesto de un conjunto de herramientas de cdigo abierto entre las que destaca su ncleo,Spring Roo. Esto le proporciona un amplio apoyo por parte de importantes organizaciones como SpringSource y VMWare. Aade funcionalidades de alto nivel a las prestaciones que ya se obtienen conSpring Roo para mejorar la productividad.

    gvNIX es un proyecto subvencionado y liderado por la Consejera de Infraestructuras, Transporte yMedio Ambiente (CITMA) de la Generalidad Valenciana.

    gvNIX est disponible dentro del proyecto de Migracin a Software de fuentes abiertas gvPONTIS.

    Comunidad online de gvNIX

    Proyecto gvNIX en Google Code

    Pgina de gvNIX dentro del proyecto gvPONTIS

    Pgina oficial de Spring Roo

    1.2. Qu es Spring Roo?Segn su creador, Ben Alex: "Roo es un pequeo genio que observa desde un segundo plano y gestionatodo aquello de lo que no me quiero preocupar".

    Spring Roo es un entorno de trabajo Java que permite el desarrollo de aplicaciones web de forma rpiday cmoda para el desarrollador. Sus principales caractersticas son:

    Generacin de cdigo en Java (lenguaje esttico).

    Eliminar el trabajo tedioso centrando el desarrollo en la lgica de negocio.

    Convencin sobre configuracin.

    Desarrollo dirigido por el dominio (Domain-Driven Development):

    Diseo dirigido por el modelo de entidades.

    Lgica en las entidades (Real Object Oriented), eliminando capas redundantes.

    Otras capas opcionales (servicios, DAOs, ...).

    Crea un proyecto en segundos.

    Realimentacin: aade valor durante todo el ciclo de vida.

    No incorpora elementos adicionales al entorno de ejecucin, por lo que no penaliza la velocidad nila memoria de la aplicacin.

  • Introduccin

    1.4.1.RELEASE 3

    No requiere ningn IDE.

    Recibe instrucciones a travs de una consola interactiva con autocompletado y ayuda en lnea.

    Extensible usando bundles OSGi.

    Aprovecha el conocimiento: no necesita ms conocimiento que el necesario para el desarrollo deaplicaciones JEE.

    1.3. Qu ofrece gvNIX?gvNIX aprovecha las caractersticas de Spring Roo y aporta su propia filosofa, ofrecer al desarrolladorcomponentes de alto valor funcional para aplicaciones corporativas:

    Control de concurrencia a nivel de aplicacin sin campos en base de datos.

    Utilidades de generacin de consultas.

    Utilidades de modificaciones mltiples de entidades.

    Gestin de temas visuales.

    Gestin de la visualizacin de excepciones.

    Gestin de mensajes de usuario en ventana modal.

    Gestin de la estructura de pginas en el men.

    Gestin de patrones de visualizacin de entidades y sus relaciones.

    Gestin de transformacin de cadenas vacas a valores nulos.

    Gestin de servicios locales y servicios web (importacin y exposicin).

    Control de acceso (autenticacin y autorizacin).

    Gestin de configuraciones por entorno.

    Generacin de documentos (reportes).

    1.4. ArquitecturagvNIX se centra en el desarrollo de aplicaciones Java para entornos corporativos.

    La arquitectura de Roo y gvNIX se subdivide en 2 grandes bloques: el entorno de desarrollo y elentorno de ejecucin

    El entorno de desarrollo incorpora distintas herramientas enfocadas al desarrollo rpido deaplicaciones Java. La caracterstica ms importante del entorno de desarrollo es que no introduceningn tipo de librera propia, de tal forma que en tiempo de ejecucin no aade sobre coste algunoal rendimiento a las aplicaciones.

    El entorno de ejecucin es un entorno tpico de aplicaciones basadas en Spring 3:

    Acceso a bases de datos relacionales usando el API Java Persistence (JPA).

  • Introduccin

    1.4.1.RELEASE 4

    Inyeccin de dependencias.

    Gestin de transacciones propia de Spring.

    Pruebas unitarias con JUnit.

    Configuracin Maven para la construccin de las aplicaciones.

    Vistas JSP usando Spring MVC. Adems, se pueden utilizar otras tecnologas de visualizacintales como Flex, GWT, JSF y Vaadin.

    Las aplicaciones basadas en Spring son probablemente las aplicaciones Java ms populares seguidasde JSF, Struts y GWT segn el Developer Productivity Report 2012.

    Es importante destacar que Roo y gvNIX no imponen ninguna restriccin sobre el tipo de aplicacionesque se pueden generar con este entorno. Algunos ejemplos de las funcionalidades que se pueden cubrirfcilmente con la versin actual son (notar que no estn limitadas nicamente a estas):

    Intercambio de mensajes por JMS o envo por SMTP.

    Capa de servicios opcional con posibilidad de acceso remoto para clientes RIA.

    Ejecucin de acciones predefinidas contra la base de datos.

    Una de las mayores diferencias entre Roo/gvNIX y las aplicaciones tradicionales generadas a mano esque, por defecto, no aade capas de abstraccin innecesarias. Las aplicaciones Java ms tradicionalestienen una capa DAO, capas de servicios, capa de dominio y una capa de control. En una aplicacingenerada con Roo/gvNIX inicialmente solo se usa una capa de Entidad (que es similar a la capa dedominio) y una capa Web. Se podr generar tambin una capa de Servicios y/o DAO si fuese necesario.

    A continuacin se puede ver un diagrama de los componentes de la arquitectura, capas y tecnologasrelacionadas en Roo/gvNIX:

    Figura 1.1. Diagrama Arquitectura

    1.5. El intrprete de comandosPara que el entorno empiece a funcionar, hay que arrancar un intrprete de comandos (Roo shell)mediante el que se interactuar con el entorno de desarrollo. Este intrprete de comandos o consolatiene dos funciones bsicas:

    Ejecutar las rdenes indicadas por el desarrollador.

  • Introduccin

    1.4.1.RELEASE 5

    Monitorizar cualquier cambio en el proyecto para reajustar el cdigo generado.

    La consola tiene el siguiente aspecto:

    ____ ____ ____

    / __ \/ __ \/ __ \ / /_/ / / / / / / / / _, _/ /_/ / /_/ / gvNIX x.x.x distribution/_/ |_|\____/\____/ x.x.x-RELEASE [rev xxxxxxx]

    Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.roo-gvNIX>

    La usabilidad es un factor clave en el entorno de trabajo. Entre las principales caractersticas deusabilidad que proporciona la consola se encuentran:

    Comandos hint y help: Guan al usuario sobre la forma de proceder

    TAB para completar prcticamente cualquier comando.

    Pulsando TAB Roo sugiere que hacer a continuacin, que comando se puede utilizar a continuacin,incluso pulsando algn caracter qu comandos que empiezan por ese caracter se pueden utilizar.

    Si se produce algn error en alguna operacin, Roo deshar todos los cambios generados dejandola aplicacin como se encontraba inicialmente.

    Ejecucin de scripts: Se puede guardar una secuencia de comandos en un archivo de texto yejecutarlos en bloque cuantas veces se necesite. Por ejemplo, se puede hacer un guin para crearuna aplicacin completa y ejecutarlo en el intrprete de Roo.

    Funcionamiento predictivo y conservador: Al ejecutarse en segundo plano debe ser un entornoconservador en el sentido que si no cambia nada en el proyecto no debe tocar nada, el desarrolladorno debe perder nunca el control del proyecto.

    1.6. Cmo funciona?Este diagrama muestra a alto nivel el modelo funcional de Roo y gvNIX:

    Figura 1.2. Diagrama de modelo funcional de Roo y gvNIX

    Anotaciones

    Conjunto de anotaciones JAVA que utilizan Roo y gvNIX para poder identificar un tipo de artefactoconcreto y su configuracin. Tienen una poltica de retencin SOURCE por lo que el compiladorJava no las incluir en la clases compiladas.

  • Introduccin

    1.4.1.RELEASE 6

    Proyecto Java

    Es el contenido de nuestra aplicacin formada por todos los archivos necesarios.

    Infraestructura de Roo/gvNIX

    Toda la infraestructura de Roo/gvNIX que forma el entorno de desarrollo, autocontenida y separadadel proyecto final. Se compone de:

    Add-ons

    Componentes que automticamente monitorizan y realizan cambios en nuestro proyecto.

    Tambin ofrecen un conjunto de comandos para que los desarrolladores puedan realizaroperaciones a travs del intrprete de comandos.

    Intrprete de comandos (Shell)

    Componente que permite la recepcin y ejecucin de rdenes del desarrollador

    STS: SpringSource Tool Suite

    Plugin/Aplicacin Eclipse de SpringSource para trabajar con proyectos Spring. Entre otras,dispone de herramientas para trabajar con Roo/gvNIX.

    1.7. Generacin de cdigoRoo y gvNIX es un generador de cdigo hbrido, puesto que intenta combinar lo mejor de los modelosde generacin pasiva y activa.

    Generacin pasiva:

    El desarrollador indica a la herramienta qu es lo que debe generar, y una vez generado finalizael trabajo de la herramienta. No se asume un mantenimiento a largo plazo del cdigo generado.El desarrollador interacta mediante el intrprete de comandos, desde ah se realiza y termina elproceso de generacin de cdigo, que genera archivos xml y java.

    Generacin activa:

    Es una realimentacin automtica que genera un modelo detallado de metadatos con la ayuda de lasanotaciones @Roo y @GvNIX e incrementalmente actualiza archivos aj y jsp. Permite mantenerautomticamente elementos del proyecto en respuesta a cambios, este tipo de generacin nuncamodifica archivos java, estos solo se modifican por indicacin expresa del desarrollador y solo atravs del intrprete de comandos.

  • 1.4.1.RELEASE 7

    Captulo 2. Instalacin de gvNIX2.1. Requisitos previos

    gvNIX es en si mismo una aplicacin Java por lo que requiere tener una mquina virtual Java instaladaen el sistema.

    La lista de requisitos es la siguiente:

    Versin ms actual de Java JDK 6 instalado en el sistema (Ms informacin).

    Maven 3.0.x o superior (http://maven.apache.org/).

    Conexin a Internet para la descarga de las dependencias de los proyectos.

    2.1.1. Configuracin del entorno

    La configuracin del entorno solo ser necesario si se va a utilizar gvNIX desde la consola del sistema.Por lo tanto, no ser necesario realizar todos los pasos indicados en este punto si se va a utilizar gvNIXdesde Eclipse o STS tal y como se detallar posteriomente.

    Una vez descargado el archivo de instalacin de Java JDK y Maven veamos como configurar el entornode trabajo para usar estas herramientas.

    Nota

    Las siguientes notas sobre configuracin son una recomendacin de buenas prcticas. Lavariable $HOME hace referencia al path del directorio de raz de usuario (por ejemplo: /home/usuario). Se supondr instalado Java JDK y Maven en:

    1. Java JDK 1.6 instalada en: /home/usuario/software/jdk1.6.0_35

    2. Maven 3 instalado en: /home/usuario/software/apache-maven-3.0.4

    Variables de entorno.

    En entornos Unix, se puede utilizar $HOME/.bashrc para definir las variables de entorno yautomticamente se cargarn al abrir una nueva consola. Es una buena prctica definirlas ennuestro propio archivo y cargarlo desde el $HOME/.bashrc, en este caso dicho archivo se llamar$HOME/.bash_devel.

    En sistemas Windows, establecer en las propiedades de "Mi PC" nicamente las variables de entornoque se definen a continuacin en el segundo punto.

    Modificar $HOME/.bashrc para que cargue el archivo $HOME/.bash_devel:

    Aadir al final del archivo .bashrc las siguientes lneas:

    # Development settingsif [ -f ~/.bash_devel ]; then . ~/.bash_develfi

    Crear/Modificar $HOME/.bash_devel para aadir las variables de entorno:

  • Instalacin de gvNIX

    1.4.1.RELEASE 8

    export JAVA_HOME=$HOME/software/jdk1.6.0_35

    export M2_HOME=$HOME/software/apache-maven-3.0.4

    export M2=$M2_HOME/bin

    export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=512"

    export PATH=$JAVA_HOME/bin:$M2:$PATH

    Con estos cambios cada vez que se abra una consola del sistema estarn cargadas las variables deentorno. Tambin se puede cargar los cambios realizados en estos ficheros ejecutando el comandosource en la consola de entornos Unix:

    bash:~$ source .bashrc

    Una vez realizados estos cambios se puede comprobar su funcionamiento: (Ejecutando loscomandos siguientes veremos salidas similares a las que se muestran)

    bash:~$ java -versionjava version "1.6.0_35"Java(TM) SE Runtime Environment (build 1.6.0_35-b04)Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)bash:~$ mvn -versionApache Maven 3.0.4 (r1056850; 2012-01-09 17:58:10+0100)Java version: 1.6.0_35, vendor: Sun Microsystems Inc.Java home: /home/usuario/software/jdk1.6.0_35/jreDefault locale: es_ES, platform encoding: UTF-8OS name: "linux", version: "3.2.0-30-generic", arch: "amd64", family: "unix"

    2.1.2. Acceso a travs de un proxy

    Si la conexin a Internet se realiza a travs de un proxy, habr que configurar tanto Java como Mavenpara que puedan acceder al exterior correctamente.

    Java a travs de proxy:

    Es posible que la red en la que se est trabajando requiera de la configuracin de un Proxy parael acesso a internet.

    gvNIX/Roo dispone de un comando que indica si la instalacin de Java est, o no, configurada paraconectar a Internet a travs de un proxy.

    roo-gvNIX> proxy configuration *** Your system has no proxy setup ***http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html offersuseful information.For most people, simply edit /etc/java-6-openjdk/net.properties (or equivalent) andset the java.net.useSystemProxies=true property to use your operating system-definedproxy settings.

    En el ejemplo anterior indica que no hay ningn proxy configurado. Si es necesario hacerlo se debeseguir la gua tal y como indica la salida del comando.

    Si se han seguido las recomendaciones para instalar Java, ir a /home/usuario/software/jdk1.6.0_35/jre/lib. Aqu estar el archivo net.properties que se debe editar y configurarlo segn las necesidades.

  • Instalacin de gvNIX

    1.4.1.RELEASE 9

    La opcin ms sencilla es establecer la propiedad java.net.useSystemProxies=true. Esto le indica aJava que debe utilizar la configuracin del proxy que previamente se haya definido en el sistemaoperativo. Sin embargo puede no funcionar en todos los sistemas.

    En caso de no funcionar lo anterior, definir la configuracin especfica del proxy buscando laspropiedades descritas a continuacin y aadindolas si no existen:

    java.net.useSystemProxies=false

    http.proxyHost=host.proxy.de.red (ejemplo: proxy.mired.com)http.proxyPort=puerto (ejemplo: 8080)http.nonProxyHosts=hosts.a.ignorar.1|host.a.ignorar.2 (ejemplo: localhost|127.0.0.1|192.168.1.*|*.mired.com)

    https.proxyHost=host.proxy.de.red (ejemplo: proxy.mired.com)https.proxyPort=puerto (ejemplo: 8080)https.nonProxyHosts=hosts.a.ignorar.1|host.a.ignorar.2 (ejemplo: localhost|127.0.0.1|192.168.1.*|*.mired.com)

    Si se configura alguna de estas propiedades el comando proxy configuration informar de los valoresconfigurados.

    Maven a travs de proxy:

    Algunos comandos de gvNIX/Roo utilizan la herramienta Maven y dicha herramienta en algunoscasos necesita conexin con Internet para, por ejemplo, descargar las dependencias de los proyectosgenerados.

    Es por ello que si se accede a Internet a travs de un proxy se deber configurar en el fichero$M2_HOME/conf/settings.xml las siguientes secciones en el lugar adecuado del fichero. Revisarlas secciones comentadas porque existir ya una seccin de este tipo como ejemplo:

    Proxyhttp true http host.proxy.de.red (ejemplo: proxy.mired.com) puerto (ejemplo: 8080)

    Proxyhttps true https host.proxy.de.red (ejemplo: proxy.mired.com) puerto (ejemplo: 8080)

    2.2. Descarga e instalacin de gvNIX1. Descargar (https://code.google.com/p/gvnix/downloads/list) y descomprimir el fichero ZIP de la

    versin de gvNIX ms actual, por ejemplo gvNIX-X.Y.Z.RELEASE.zip

    Ejemplo para sistemas Unix y Apple:bash:~$ unzip gvNIX-X.Y.Z.RELEASE.zip

  • Instalacin de gvNIX

    1.4.1.RELEASE 10

    2. Al descomprimir el fichero ZIP se crear un nuevo directorio gvNIX-X.Y.Z.RELEASE. En el restodel documento se har referencia a este directorio como GVNIX_HOME

    3. Incluir el directorio bin de gvNIX en la variable de entorno PATH.

    Solo ser necesaria si se utiliza gvNIX desde la consola del sistema. Por lo tanto, no ser necesariorealizar todos los pasos indicados en este punto si se utiliza gvNIX desde Eclipse o STS tal y comose detallar posteriomente.

    Ejemplo para sistemas Unix y Apple:bash:~$ cd gvNIX-X.Y.Z.RELEASEbash:~/gvNIX-X.Y.Z.RELEASE$ export PATH=$PWD/bin:$PATH

    Se puede definir la variable GVNIX_HOME y su inclusin en el PATH del sistema mediante elarchivo .bash_devel y as tenerla disponible de manera permanente.

    Recordar que en sistemas Windows, se pueden establecer en las propiedades de "Mi PC" lasvariables de entorno que se definen a continuacin.

    Para ello modificamos el archivo para que quede como sigue:

    ...

    export GVNIX_HOME=$HOME/software/gvNIX-X.Y.Z.RELEASE

    export PATH=$JAVA_HOME/bin:$M2:$GVNIX_HOME/bin:$PATH

    Notar que la ltima lnea es la modificacin de la definicin de la variable PATH. Recordarrecargar el fichero .bash_devel mediante el comando source de la consola de entornos Unix.

    Una vez hecho esto, ya se puede trabajar con el entorno gvNIX desde la lnea de comandos. Sinembargo, se recomienda utilizar un IDE de desarrollo que permita integrar el entorno gvNIX como,por ejemplo STS o Eclipse tal y como se ver en la seccin posterior. An as, si se desea abrir elintrprete de comandos desde la lnea de comandos se puede hacer de la siguiente forma:

    Cambiar al directorio donde se encuentre el proyecto Java existente o a un directorio vaco en elcaso de tratarse de un proyecto nuevo:

    bash:~$ cd ~/project-directory

    Ejecutar el intrprete de comando de gvNIX para interactuar con el proyecto Java:bash:~/project-directory$ gvnix.sh

    (En sistemas windows el intrprete se abrir con gvnix.bat)

    Con esto se abrir la consola de gvNIX y se mostrar algo similar a lo siguiente:

    ____ ____ ____

    / __ \/ __ \/ __ \ / /_/ / / / / / / / / _, _/ /_/ / /_/ / gvNIX x.x.x distribution /_/ |_|\____/\____/ x.x.x-RELEASE [rev xxxxxxx]

    Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER. roo-gvNIX>

  • Instalacin de gvNIX

    1.4.1.RELEASE 11

  • 1.4.1.RELEASE 12

    Captulo 3. Desarrollo con Eclipse

    3.1. InstalacinSpring ha desarrollado una extensin para Eclipse llamada SpringSource Tool Suite o STS, que ofrecesoporte para trabajar en Eclipse con aplicaciones de Spring, entre ellas Spring Roo y por tanto gvNIX.Entre otras funcionalidades incorpora un intrprete de comandos de Roo que permite ejecutar rdenessin necesidad de salir de Eclipse.

    Hay dos formas de instalar STS, la primera es como una distribucin propia y la segunda es como unplugin de un Eclipse ya existente. Se recomienda encarecidamente utilizar la primera de ellas por sufacilidad de instalacin y mejor rendimiento.

    3.1.1. STS como distribucin

    Para instalar el IDE como una distribucin propia realizar los siguientes pasos:

    Descargar la ltima versin de Springsource Tool Suite desde http://spring.io/tools

    Descomprimir el archivo descargado y moverlo a una carpeta, por ejemplo $HOME/software.

    Ejecutar STS ($HOME/software/springsource-X.X.X/sts-X.X.X.RELEASE/STS). Tener en cuentaque STS es una aplicacin Java por lo que requiere tener una mquina virtual Java instalada en elsistema.

    3.1.2. STS como plugin

    Para instalar el IDE en un Eclipse existente seguir los siguientes pasos:

    Si no se dispone todava de l, descargar Eclipse IDE for Java EE Developers de http://www.eclipse.org/downloads/

    Crear la variable de classpath de Eclipse M2_REPO, para ello:

    1. Window > Preferences > Java > Build Path > Classpath Variables , botn New... .

    2. Definir los siguientes valores:

    Name = M2_REPO .

    Path = directorio correspondiente al repositorio de Maven (normalmente en Unix:$HOME/.m2/repository)

    3. Ok para crear la variable, y Ok de nuevo para cerrar la ventana de preferencias y guardar cambios.

    Instalar plugin M2Eclipse para Eclipse (http://m2eclipse.sonatype.org/installing-m2eclipse.html)

    En el men Help > Install New Software, en el campo de texto "Work with:" indicar que se usarel site: http://m2eclipse.sonatype.org/sites/m2e. A continucin eleccionar "Maven Integration forEclipse". Pulsar en siguiente y tras aceptar la licencia del plugin instalar.

    Activa la opcin Enable Window > Preferences > General > Workspace > RefreshAutomatically .

  • Desarrollo con Eclipse

    1.4.1.RELEASE 13

    Opcionalmente, instalar el plugin Subeclipse para trabajar sobre el sistema de control de versionesSubversion (SVN).

    Para ello en Eclipse, en el men Help > Install New Software. En la ventana que se abre hacer clicksobre el botn Add que hay a la derecha de Work with. Se abre un dilogo en el que se indicar comonombre Subeclipse por ejemplo y en la URL indicar http://subclipse.tigris.org/update_1.6.x guardarcon OK y la ventana anterior empezar la carga de los plugins que hay disponibles. Seleccionarlosy seguir haciendo click en Next. La URL indicada es de la versin actual, revisar el sitio oficial deSubeclipse para ms informacin y futuras versiones.

    Para instalar el plugin STS seguir las instrucciones del punto "UPDATE SITE INSTALLATION"del documento Spring Source Tool Suite Installation Instructions.

    3.1.3. Integrar soporte ROO en STS

    Spring Roo ya no est incluido en la distribucin de STS a partir de su versin 3.6.0, por ellonecesitaremos instalar este soporte para poder trabajar con gvNIX.

    Para incluir este soporte, sigue los siguientes pasos:

    1. Abre tu STS

    2. Abre el dashboard del STS y busca Spring ROO

    3. Instala Spring Roo (current production release) y Spring IDE - Roo Extension

    4. Reinicia tu STS

    Figura 3.1. Integrando soporte ROO en STS

    3.2. Consola gvNIX / Roo integrada en EclipseEl plugin o distribucin de STS instalado ofrece la posibilidad de incluir la consola de gvNIX en elpropio entorno de desarrollo. Para ello antes hay que indicarle a Eclipse donde est instalada la nuevaversin de gvNIX.

    En el men Window > Preferences > Spring > Roo Support. Pulsar sobre el botn Add y buscar enel navegador de archivos el lugar donde est instalado gvNIX. Aparecer una pantalla similar a lasiguiente:

  • Desarrollo con Eclipse

    1.4.1.RELEASE 14

    Figura 3.2. Configuracin del soporte gvNIX en Eclipse

    Presionando en OK sobre las dos pantallas que abiertas ya estar configurado el soporte para la linea decomandos de gvNIX. Para poder usarlo abrir la perspectiva de Spring con Window > Open Perspective> Other > Spring. En la parte inferior de la pantalla aparecer una pestaa llamada Roo Shell. Si noapareciese la pestaa, puede abrirse seleccionando Window > Show View > Roo Shell.

    Para abrir la consola pulsar en el botn que aparece en la parte superior derecha de la pestaa conel ttulo Open Roo Shell. Entonces seleccionar el proyecto en el que se va a trabajar y ya se puedeempezar a ejecutar comandos. Si no se dispone todava de ningn proyecto, en el punto siguiente sever como crear un nuevo proyecto.

    La ejecucin de comandos tambin se puede hacer de forma grfica pulsando en el botn que apareceen la parte superior derecha de la pestaa con el ttulo Open Roo Command Wizard.

    Figura 3.3. Consola gvNIX en Eclipse

  • Desarrollo con Eclipse

    1.4.1.RELEASE 15

    Nota

    Hay que tener en cuenta una pequea diferencia a la hora de usar la lnea de comandosdesde Eclipse con respecto a la linea de comandos de gvNIX en la consola del sistema.Mientras en una consola del sistema se utiliza la tecla TAB para completar los comandos,en el IDE se utilizar Ctrl+Space que es el atajo por defecto usado en Eclipse.

    3.3. Utilizar Eclipse como IDE

    3.3.1. Crear proyecto gvNIX en Eclipse IDE

    Crear un proyecto gvNIX desde Eclipse a travs del men: File > New > Spring Roo Project:

    Figura 3.4. Nuevo proyecto Spring Roo con soporte gvNIX

    Esta primera pantalla habr ejecutado de forma automtica el comando de creacin de un nuevoproyecto:

    project --topLevelPackage com.gvnix.tenminutes

    En este punto ya se dispone de un proyecto Maven preparado.

  • Desarrollo con Eclipse

    1.4.1.RELEASE 16

    A continuacin, aadir el soporte para el manejo de la persistencia de datos a travs de JPA. El siguienteejemplo muestra los comandos que se deben usar para configurar el soporte JPA. Recordar que sepuede usar Ctrl+Space como ayuda a la escritura en los comandos:

    roo-gvNIX> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORYCreated ...roo-gvNIX> entity jpa --class ~.domain.Timer --testAutomaticallyCreated ...~.domain.Timer roo-gvNIX> field string --fieldName message --notNullManaged ...

    El comando jpa setup permite configurar la capa de acceso a datos de manera sencilla. El comandoentitiy jpa sirve para crear una nueva entidad y field crea atributos en la entidad. Estos comandos severn con ms detalle en la seccin Persistencia de objetos y Crear una entidad con el intrprete decomandos, tambin se ver como generar todas las entidades de una aplicacin mediante el procesode ingeniera inversa contra un esquema de BBDD existente.

    ~.domain.Timer roo-gvNIX> web mvc setup~.domain.Timer roo-gvNIX> web mvc all --package ~.webCreated ...

    Los comandos web mvc crean la capa capa web que gestionaran la interaccin del usuario con laaplicacin. Se vern con ms detalle en Crear la capa web con el intrprete de comandos.

    ~.web roo-gvNIX> selenium test --controller ~.web.TimerControllerCreated ...

    Si se desea incluir en el proyecto los tests funcionales existe el comando selenium test que generarlos scripts necesarios para probar la interfaz web de la aplicacin. Ms adelante se ver como poneren marcha la aplicacin y como ejecutar estos tests.~.web roo-gvNIX> theme install --id cit~.web roo-gvNIX> theme set --id cit

    Mediante el comando theme, del Add-on Theme Manager propio de gvNIX, se puede configurar eltema visual que presentar la aplicacin.

    3.3.2. Importar proyecto gvNIX en Eclipse

    gvNIX/Roo permite crear proyectos desde la linea de comandos, aunque puede suceder que se necesiteimportar un proyecto ya existente en el IDE. Si se est ejecutando gvNIX en la lnea de comandos,bastara con ejecutar el comando perform eclipse para crear una estructura de proyecto Eclipse:~.domain.PizzaOrder roo-gvNIX> perform eclipse[Thread-6] Warning: JAVA_HOME environment variable is not set.[Thread-6] [INFO] Scanning for projects...[Thread-6] [INFO] ------------------------------------------------------------------------[Thread-6] [INFO] Building pizzashop[Thread-6] [INFO] task-segment: [eclipse:clean, eclipse:eclipse][Thread-6] [INFO] ------------------------------------------------------------------------[Thread-6] [INFO] [eclipse:clean {execution: default-cli}][Thread-6] [INFO] Deleting file: .project[Thread-6] [INFO] Deleting file: .classpath...

    ...

    [Thread-6] [INFO] ------------------------------------------------------------------------[Thread-6] [INFO] BUILD SUCCESSFUL[Thread-6] [INFO] ------------------------------------------------------------------------

  • Desarrollo con Eclipse

    1.4.1.RELEASE 17

    [Thread-6] [INFO] Total time: 4 seconds[Thread-6] [INFO] Finished at: Wed Jun 16 21:21:49 CEST 2010[Thread-6] [INFO] Final Memory: 36M/330M[Thread-6] [INFO] ------------------------------------------------------------------------~.domain.PizzaOrder roo-gvNIX>

    Este comando termina ejecutando el comando del sistemamvn eclipse:eclipse en el proyecto, por loque es indiferente el uso de cualquiera de los dos mtodos. Tener en cuenta que este ltimo comandonecesita tener configurado Maven.

    Ahora se puede importar en el entorno de trabajo mediante File > Import > General > ExistingProjects into workSpace. Si aparece el mensaje Turn Weaving Service on?, marcar la casilla Don'task again until next upgrade y clic en Yes (ser necesario reiniciar Eclipse).

    Tambin es posible borrar la configuracin de eclipse ejecutando el comando mvn eclipse:clean enuna consola del sistema que tenga configurada Maven. Para regenerar la configuracin de eclipse enun solo comando usar mvn eclipse:clean eclipse:eclipse.

    Al importar un proyecto en Eclipse es importante comprobar que dicho proyecto tiene configuradaslas caractersticas de proyecto Maven y proyecto de aspectos java. Esto aparece de forma visual en elproyecto mediante unas pequeas letras M y AJ. Si no apareciesen se pueden aadir estas caractersticasseleccionando el proyecto y con el segundo botn del ratn eligiendo la opcin Configure . Esto esmuy importante ya que en el caso de no estar correctamente configurado nos aparecern falsos erroresen el proyecto.

    3.4. Generacin de pruebas de integracinEl comando entity jpa dispone de la opcin testAutomatically que al ser especificada generar los testde integracin para dicha entidad usando JUnit.

    Si los tests no fueron creados en el momento de la ejecucin del comando entity, pueden ser generadoscon posterioridad mediante otro comando:

    test integration --entity ~.domain.Timer

    3.5. Arrancar la aplicacin con EclipseEs posible arrancar la aplicacin desde el propio Eclipse y, adems de permitir depurarla, permite hacercambios en caliente sobre la aplicacin.

    Para ello, debemos tener la aplicacin importada en un workspace de Eclipse y configurar el servidordnde ejecutarlo. Eclipse es capaz de gestionar distinto tipos de servidores, generando sus propiosdirectorio y ficheros de configuracin.

    Para prepara un servidor seguir los siguiente pasos:

    3.5.1. Mostrar la Vista de Servidores en Eclipse

    Eclipse tiene una vista que permite ver los distintos servidores configurados y gestionarlos desde ah.Estos son los pasos para mostrar la vista

  • Desarrollo con Eclipse

    1.4.1.RELEASE 18

    1. Abra la opcin del men Window > Show view > Other....

    2. Busque la vista llamada Servers y pulse el botn Ok.

    3.5.2. Crear un nuevo Servidor

    Se pueden definir mltiples entornos de ejecucin para los servidores. Esta configuracin incluye eltipo de servidor (Tomcat, Jetty, JBoss, etc..), Mquina Virtual Java (JRE 1.5, JRE 1.6, etc...) y la rutaa los binarios del servidor.

    Cabe destacar que eclipse no usa la configuracin que exista en la instalacin del servidor enla mayora de los casos. Solo usa los ejecutables para arrancarlo con ficheros de configuracin quealmacena en el propio workspace.

    En este caso, vamos a preparar el entorno para Tomcat 6 siguiendo los pasos indicados a continuacin:

    1. Dentro de la pestaa Servers, pinchar con el segundo botn del ratn y seleccionar New > Server.

    2. Seleccionar Apache Tomcat v6.0 Server de la lista de tipos y pulsar el botn Next.

    En el caso en que no aparezca ningn tipo de servidor o no aparezcan los de Apache Tomcat seha de realizar lo siguiente:

    Ir a Help > Install New Software....

    Desmarcar la casilla "Hide items that are already installed."

    En "Work With" seleccionar el sitio "Eclipse Web Tools Platform Repository - http://download.eclipse.org/webtools/updates/" (si no aparece, aadirlo usando el botn Add....)

    En el listado de software desplegar Web Tools Platform Tests (WST Tests) (si hay ms deun WST Tests seleccionar el de la ltima versin).

    Instalar (seleccionndolos) WST Server tests y JST Server Tests (si ya estn instaladoaparecer su icono en gris)

    3. Introducir un nombre para la configuracin.

    4. Seleccionar el directorio donde se encuentra una instalacin de Tomcat 6. Si no se dispone deninguna instalacin de Tomcat 6 crear un nuevo directorio, seleccionarlo y pulsar sobre el botnDownload and Install ... que pasados unos segundos terminar la descarga y permitir continuar.

    5. Seleccionar la mquina virtual Java con la que ejecutar el servidor.

    6. Pulsar el botn Next.

    7. Aadir las aplicaciones a ejecutar en este servidor de entre las disponibles.

    3.5.3. Ajustar la configuracin del ServidorPuede ser necesario ajustar algunas opciones de la configuracin del servidor. Para poder acceder adichas opciones hay que seleccionar el servidor desde la pestaa de servidores y, con el botn derechodel ratn sobre l pulsar Open.

  • Desarrollo con Eclipse

    1.4.1.RELEASE 19

    Desde el panel abierto podremos gestionar:

    Datos generales del servidor.

    Opciones de publicacin y seguridad.

    TimeOuts (muy til si se est depurando algn proceso de arranque).

    Puertos

    Configuracin de tipos MIME.

    Las aplicaciones/modulos a lanzar (admite mdulos externos).

    Configuracin de arranque del servidor.

    El servidor Tomcat arranca con cierta cantidad de memoria que no soportar mas de 4 cambios en elproyecto antes de llenarse y dejar de funcionar. Para evitar esto, se puede incrementar la cantidadde memoria con la que arranca Tomcat.

    Importante

    Es muy interesante modificar los parmetros de memora con los que trabaja el servidor.Para ello:

    En la pantalla de opciones de la configuracin del servidor acceder a Open launchconfiguration

    En la nueva ventana, en la pestaa Arguments aadir al final del texo que aparece enel apartado VM Arguments lo siguiente: -Xms64m -Xmx256m -XX:MaxPermSize=128m -XX:PermSize=128m

    3.5.4. Ejecucin de la aplicacin en el ServidorUna vez configurado el servidor, se podr aadir a este la aplicacin que se desea ejecutar en l. Sepuede ejecutar ms de una a la vez. En la vista Servers, pulsar con el botn derecho sobre el servidordeseado y seleccionar la opcin Add and Remove ... . En el dilogo que se abre seleccionar de la listade la izquierda la aplicacin y pulsar el botn Add. Por ltimo, cerrar el dilogo con Finish.

  • Desarrollo con Eclipse

    1.4.1.RELEASE 20

    Figura 3.5. Aadir / Eliminar aplicaciones al Servidor

    Ya es posible arrancar el servidor y probar la aplicacin.

    Figura 3.6. Vista de servidores disponibles en el workspace de Eclipse

    En la imagen anterior se observa un servidor Tomcat 6 con la aplicacin tenminutes disponible paraejecutar. Con los botones disponibles se puede arrancar la aplicacin en modo debug, arrancar laaplicacin de manera normal (botn verde con tringulo blanco en el centro), arrancar en modo profile,pararlo o re-publicar los cambios del proyecto en el servidor.

    Figura 3.7. Botones de la vista servidores de Eclipse

  • Desarrollo con Eclipse

    1.4.1.RELEASE 21

    Una vez arrancado el servidor se podr navegar por la aplicacin bien desde un navegador externo(Firefox) o bien desde un navegador propio que incorpora Eclipse accediendo a la direccin http://localhost:8080/tenminutes. Observar que el final de la direccin se corresponde con el nombre dela aplicacin proporcionado al crear el proyecto. Para abrir el navegador interno de Eclipse utilizarWindow > Show view > Internal Web Browser.

    Figura 3.8. Navegador interno de Eclipse

    Ejecutar la apliacin desde Eclipse puede ser muy til a la hora de hacer cambios en el proyecto,modificaciones en las vistas, en los objetos de aplicacin, bien desde el propio IDE o desde la lnea decomandos de gvNIX, ya que automticamente se vern reflejados los cambios en el navegador.

    3.6. Trabajando con el cdigo de la aplicacin en EclipseAl generar un proyecto con gvNIX/Roo habr que trabajar sobre el cdigo de la aplicacin para aadirms funcionalidades y/o modificar alguna de las que se han generado. A continuacin se explicarnun par de detalles que simplificaran esta tarea usando Eclipse y el plugin STS instalado.

    Figura 3.9. Vista de editor y Cross References en Eclipse

    En la imagen anterior se observa el editor de Eclipse con el archivo Timer.java que se ha generado alejecutar los comandos entity y field anteriores. En la parte derecha de la captura se ve una ventana quemuestra informacin de la clase Timer. Se trata de la vista Cross Reference. Si no est disponible en laperspectiva de trabajo, se puede incorporar desde el men Window > Show view > Cross References.Esta vista es similar a la vista Outline que muestra los campos y mtodos declarados en una clase.

  • Desarrollo con Eclipse

    1.4.1.RELEASE 22

    La particularidad de la vista Cross References es que muestra los campos y mtodos asociados a laclase Java mediante aspectos java que se vern en el Cpitulo sobre el cdigo que genera gvNIX/Roo.

    Esta informacin tambin est disponible desde un men contextual accesible haciendo click con elbotn derecho sobre la flecha que hay a la izquierda de la declaracin de la clase. El men contextuales el siguiente.

    Figura 3.10. Contextual Cross References

    Haciendo click sobre una de las entradas que aparecen en la ventana Cross References o en el mencontextual, se abrir el fichero .aj que tiene declarado ese campo o mtodo. Por ejemplo, si se accedeal mtodo Timer.toString() se abrir el editor con el archivo Timer_Roo_ToString.aj.

    Importante

    Cabe destacar que para que aparezca esta informacin sobre el cdigo asociado a una claseJava mediante aspectos java, la clase debe estar libre de errores de compilacin.

    3.6.1. Modificacin del cdigo generado

    Como se ha comentado, seguramente ser necesario aadir nuevas funcionalidades o modificar algunasde las que se han generado automticamente para adaptar el cdigo a los requisitos de la aplicacin.En estos casos hay que tener en cuenta que no se debe hacer ningn cambio sobre los aspectos java(ficheros aj) asociados a una clase Java. gvNIX/Roo ya nos lo avisa en la primera lnea del archivo .aj.El motivo de esto es, que teniendo la consola gvNIX funcionando, o al arrancar, gvNIX/Roo volveraa generar el cdigo automticamente perdiendo las modificaciones que hubisemos realizado.

  • Desarrollo con Eclipse

    1.4.1.RELEASE 23

    Figura 3.11. Edicin archivo Timer_Roo_ToString.aj

    Para modificar el cdigo de un mtodo o la declaracin de un campo que se encuentre en un aspectojava, se puede mover el mtodo o el campo a la clase Java, del que depende el aspecto java. En elejemplo, se movera a la clase Timer.java. Puede realizarse cortando y pegando, pero Eclipse con elplugin STS ofrece una opcin mucho ms adecuada para esto.

    Seleccionando el nombre del mtodo a mover y a travs del men contextual AspectJ Refactoring >Push In ... Eclipse se ocupar de eliminar el cdigo del .aj y moverlo al .java.

    Figura 3.12. Men contextual AspecJ Refactoring

    Una vez en el .java, se podr hacer cuantas modificaciones se necesiten sin peligro de que se pierdanpor la accin de gvNIX/Roo.

    Del mismo modo, si se necesita aadir nuevos mtodos o campos a la clase Java, se debe hacerdirectamente en el .java.

    Importante

    Es interesante tener abierta la consola gvNIX para que los cambios realizados sobre losficheros del proyecto disparen los cambios automticos que realiza gvNIX/Roo.

  • 1.4.1.RELEASE 24

    Captulo 4. Ejemplos gvNIX/RooEn el fichero zip de gvNIX se incluye un directorio samples donde se puede encontrar algunos scriptsque generan proyectos de aplicaciones de ejemplo.

    Para ejecutarlo puede crearse un nuevo proyecto y ejecutarlo de la siguiente forma:

    roo-gvNIX> script --file SCRIPT.rooproject ......

    Donde SCRIPT.roo es el nombre del fichero de ejemplo que se desea ejecutar.

    No todos los scripts descritos a continuacin estn en el directorio samples, pero todos s pueden serejecutados tal y como se ha indicado.

    clinic.rooEjemplo de una aplicacin de clnica veterinaria usando Hibernate, Registro Activo y Spring MVC

    bikeshop.rooEjemplo de una aplicacin de tienda de bicicletas usando Eclipse Link, DAO y JSF.

    expenses.rooEjemplo de una aplicacin de control de gastos usando Hibernate, Registro Activo y GWT.

    multimodule.rooMismo ejemplo que clinic.roo pero separando la aplicacin en tres mdulos: core, ui y mvc.

    pizzashop.rooEjemplo de una aplicacin de venta de pizzas usando Eclipse Link, DAO y ofreciendo accesoremoto con JSON a travs de Spring MVC.

    embedding.rooEjemplo de una aplicacin sin persistencia con elementos web ricos (documentos, mapas,imgenes y videos) en Spring MVC.

    vote.rooEjemplo de una aplicacin de voto usando Hibernate, Registro Activo, Spring MVC y Seguridad.

    wedding.rooEjemplo de aplicacin con uso de correo electrnico.

    report.rooMismo ejemplo que clinic.roo con generacin de informes mediante Jasper Reports.

    theme.rooMismo ejemplo que clinic.roo, pero aplicando distinto tema visual.

    es-i18n.rooMismo ejemplo que clinic.roo incluyendo la lengua Valenciana.

    occ.roo

    Mismo ejemplo que clinic.roo aadiendo control de concurrencia sin columnas adicionales en basede datos.

  • Ejemplos gvNIX/Roo

    1.4.1.RELEASE 25

    menu.roo

    Mismo ejemplo que clinic.roo, pero utilizando un sistema de mens gestionable desde la consola.

    service.rooMismo ejemplo que clinic.roo incluyendo servicios web.

    bing.rooEjemplo de aplicacin que utiliza el servicio web de bsqueda bing.

    configuration.rooMismo ejemplo que clinic.roo con dos perfiles de configuracin distintos: uno para desarrollo yotro para produccin.

    dialog.rooMismo ejemplo que clinic.roo con visualizacin de dilogos en ventana emergente y gestin deexcepciones.

    flex.rooEjemplo de una aplicacin de agenda de personas y direcciones usando Hibernate, RegistroActivo y Flex. El acceso a la aplicacin se debe realizar a travs de la siguiente direccin: http://localhost:8080/flexrocks/flexrocks_scaffold.html

    rootunes.rooEjemplo de una aplicacin de catlogo de canciones usando Hibernate, Registro Activo y Flex.El acceso a la aplicacin se debe realizar a travs de la siguiente direccin: http://localhost:8080/rootunes/rootunes_scaffold.html

    binding.rooMismo ejemplo que clinic.roo configurando el guardado de nulo en lugar de cadenas vacas enbase de datos.

    pattern.rooEjemplo de una aplicacin aplicando distintos patrones de visualizacin de la informacin enpantalla de entidades y sus relaciones.

    typicalsecurity.rooMismo ejemplo que clinic.roo configurando la seguridad de acceso a la aplicacin medianteusuarios almacenados en base de datos.

    bootstrap.rooMismo ejemplo que clinic.roo modificando la apariencia para que utilice Bootstrap 3

    datatables.rooMismo ejemplo que clinic.roo aplicando datatables en todas las pantallas de listado del proyecto.

    gvasecurity.rooMismo ejemplo que clinic.roo configurando como proveedor de seguridad SAFE y APLUSU

    La mayora de esto ejemplos utilizan bases de datos en memoria por lo que no necesitan configuracinadicional.

  • 1.4.1.RELEASE 26

    Parte II. Desarrollo deaplicaciones con gvNIX

    En esta seccin se ver paso a paso cmo desarrollar una aplicacin web desde cero demostrando cmo utilizargvNIX en cualquier proyecto web. Algunas de las caractersticas de gvNIX que se vern son:

    Creacin de un nuevo proyecto.

    Configuracin del acceso a datos.

    Cdigo genereado automticamente.

    Gestin del modelo de entidades.

    Gestin de la capa web.

  • 1.4.1.RELEASE 27

    Captulo 5. Crear una nueva aplicacinEl proyecto de ejemplo que se utilizar en esta parte de la documentacin consiste en una aplicacinweb para la venta de pizzas, Pizza Shop.

    Requerimientos:

    Los clientes pueden hacer pedidos por la web.

    Los empleados crean pedidos recibidos por telfono.

    Las pizzas son un conjunto de ingredientes sobre una base.

    gvNIX es especialmente potente si usamos los principios del diseo dirigido por el dominio (DDD).Bsicamente son un conjunto de patrones para construir aplicaciones a partir del modelo del dominio.En el mbito de gvNIX destacan las siguientes dos caractersticas:

    Diseo dirigido por el modelo. Representar fielmente los conceptos seleccionados del dominio delproblema, por ejemplo utilizando UML (diagramas de clases).

    Arquitectura por capas. Separar la lgica de negocio de la lgica de aplicacin (transacciones,seguridad, etc), de la lgica de presentacin y de la lgica de infraestructura (acceso a datos, accesoa servicios externos, etc).

    La arquitectura por capas es un patrn que gvNIX se encarga de aplicar por nosotros, sin embargo,debemos conocer las capas generadas por gvNIX porque este conocimiento ser de utilidad a la horade hacer nuestros desarrollos.

    Por tanto, lo primero que se debe hacer es definir el modelo del dominio:

    Figura 5.1. Pizza Shop Domain Model

    5.1. Crear un nuevo proyectoLa creacin de un nuevo proyecto se puede realizar de dos formas, en funcin de si se hace desde laconsola del sistema operativo o desde el IDE. Para ello, leer las secciones Crear proyecto gvNIX enEclipse IDE para la creacin desde el IDE o Descarga e instalacin gvNIX para la creacin desdela consola del sistema.

    Acceder a la consola y teclear hint para mostrar la informacin del asistente que cambiar durante elproceso de desarrollo en funcin del estado en el que se encuentre el proyecto:

    roo-gvNIX> hint Welcome to Roo! We hope you enjoy your stay!

    Before you can use many features of Roo, you need to start a new project.

  • Crear una nueva aplicacin

    1.4.1.RELEASE 28

    To do this, type 'project' (without the quotes) and then hit TAB.

    Enter a --topLevelPackage like 'com.mycompany.projectname' (no quotes).When you've finished completing your --topLevelPackage, press ENTER.

    Your new project will then be created in the current working directory.

    Note that Roo frequently allows the use of TAB, so press TAB regularly.

    Once your project is created, type 'hint' and ENTER for the next suggestion.You're also welcome to visit http://forum.springframework.org for Roo help.

    Muestra las instrucciones para continuar y crear un proyecto. El proyecto ya estar creado si se hizodesde la consola del IDE y se podr pasar a la siguiente seccin, en caso contrario teclear project.Pulsar la tecla TAB (tabulador) para que se muestre el parmetro --topLevelPackage y definir elpaquete principal del proyecto, en este caso com.springsource.roo.pizzashop. Tambin se puede indicarel JDK con el que se va a trabajar en el proyecto aadiendo el atributo --java 6, el nmero 6corresponde a la versin del JDK utilizado, en este caso JDK 1.6, si no se especifica Roo por defectoutiliza el JDK 1.6

    roo-gvNIX> project --topLevelPackage com.springsource.roo.pizzashopCreated ROOT/pom.xmlCreated SRC_MAIN_RESOURCES

    Created SRC_MAIN_RESOURCES/log4j.propertiesCreated SPRING_CONFIG_ROOT

    Created SPRING_CONFIG_ROOT/applicationContext.xml

    Una vez creado el proyecto observar que el foco de la consola ha cambiado, ahora se encuentraapuntando al paquete base del proyecto que se ha indicado al crearlo:

    com.springsource.roo.pizzashop roo-gvNIX>

    Por otro lado, la estructura de directorios creada esta basada en las recomendaciones de Maven.

    Figura 5.2. Estructura de carpetas

  • 1.4.1.RELEASE 29

    Captulo 6. Gestin del acceso a datos6.1. Persistencia de objetos

    Trabajar en un entorno orientado a objetos con acceso a fuentes de datos relacionales (lo habitual entecnologa Java) puede suponer un incremento de los tiempos de desarrollo porque se debe incluirla lgica necesaria para hacer corresponder el modelo relacional de la base de datos, que trata conrelaciones y conjuntos, con el paradigma orientado a objetos de las entidades del proyecto, que tratacon objetos, atributos y asociaciones de unos con otros. Esta problemtica es la que se conoce comodesajuste objeto-relacional (object-relational impedance mismatch).

    La tcnica y herramientas ORM (Object-Relational Mapping) surgen para reducir el coste de desarrolloque supone el desajuste objeto-relacional. Las tcnicas de ORM permiten automatizar procesos quetrasladan objetos a formas almacenables en tablas y viceversa, preservando los atributos de los objetos.Para esto se basan en la utilizacin de metadatos de correspondencia que especifican la informacinnecesaria para que se pueda efectuar de forma automtica la conversin de datos entre el sistemarelacional y el sistema orientado a objetos.

    Esta tcnica supuso que empezaran a aparecer multitud de libreras y herramientas ORM para Java.Para estandarizar esta tcnica en el mundo Java y hacer nuestras aplicaciones independientes de laherramienta surgi JPA (Java Persistence API), actualmente en su versin 2 (JSR 317).

    gvNIX (herencia del ncleo Spring Roo) fundamenta su interaccin con la base de datos en un sistemade persistencia JPA 2. Gracias a esto las aplicaciones desarrolladas con gvNIX se benefician de lasmejoras de tiempos de desarrollo que aportan la tcnica y herramientas ORM.

    Regresando a la creacin del nuevo proyecto, el primer paso es instalar y configurar el sistema depersistencia. Teclear hint que sugerir los siguientes pasos a dar:

    roo-gvNIX> hintRoo requires the installation of a persistence configuration,for example, JPA or MongoDB.

    For JPA, type 'jpa setup' and then hit TAB three times.We suggest you type 'H' then TAB to complete "HIBERNATE".After the --provider, press TAB twice for database choices.For testing purposes, type (or TAB) HYPERSONIC_IN_MEMORY.If you press TAB again, you'll see there are no more options.As such, you're ready to press ENTER to execute the command.

    Once JPA is installed, type 'hint' and ENTER for the next suggestion.

    Similarly, for MongoDB persistence, type 'mongo setup' and ENTER.

    roo-gvNIX>

    En el mbito de esta documentacin es suficiente con conectar la aplicacin con una base de datosque no necesita ningn servidor instalado como Hypersonic e Hibernate como implementacin delsistema de persistencia:

    roo-gvNIX> jpa setup --provider HIBERNATE --database HYPERSONIC_PERSISTENTCreated SPRING_CONFIG_ROOT/database.propertiesUpdated SPRING_CONFIG_ROOT/applicationContext.xmlCreated SRC_MAIN_RESOURCES/META-INF/persistence.xmlUpdated ROOT/pom.xml [added dependencies org.hsqldb:hsqldb:2.2.9,org.hibernate:hibernate-core:4.2.2.Final, org.hibernate:hibernate-entitymanager:4.2.2.Final,

  • Gestin del acceso a datos

    1.4.1.RELEASE 30

    org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final,commons-collections:commons-collections:3.2.1,org.hibernate:hibernate-validator:4.3.1.Final,javax.validation:validation-api:1.0.0.GA,javax.transaction:jta:1.1, org.springframework:spring-jdbc:${spring.version},org.springframework:spring-orm:${spring.version},commons-pool:commons-pool:1.5.6, commons-dbcp:commons-dbcp:1.4]roo-gvNIX>

    Aviso

    Este tipo de bases de datos no es la mejor opcin para un entorno de produccin, utilizarlaslo para entornos de desarrollo, demostraciones y formacin.

    Aviso

    Con la ingeniera directa, es decir, la creacin de entidades y campos mediante loscomandos de la consola, se configura el sistema de persistencia para crear la base de datoscada vez que se arranca la aplicacin. Por eso, los datos de la demo se perdern cada vezque se inicie la aplicacin. Esto no es as cuando se utiliza la ingeniera inversa a partirde un esquema de base de datos ya existente.

    Este comportamiento se puede cambiar en la configuracin del sistema de persistencia:src/main/resources/META-INF/persistence.xml. Consultar la seccin enlazar base dedatos existente para aprender cmo cambiar el comportamiento por defecto.

    6.2. Configurar la conexin con la base de datosEn cualquier punto del ciclo de vida de una aplicacin puede surgir la necesidad de cambiar de base dedatos (distinta tecnologa de bases de datos, cambio de la clave de acceso, cambio del equipo donde seencuentra la base de datos, etc), para estos casos gvNIX ofrece una serie de comandos que simplificarnla actualizacin de la configuracin de acceso a la base de datos:

    jpa setup

    database properties

    6.2.1. jpa setupCrea o actualiza la configuracin del acceso a datos (base de datos y el proveedor de persistencia oORM). Entre los parmetros requeridos estn la herramienta ORM y la base de datos a utilizar.

    Los parmetros obligatorios que requiere este comando son:

    --providerIdentificador de la herramienta ORM. Los valores posibles son:

    DATANUCLEUSData Nucleus

    ECLIPSELINKEclipseLink

    HIBERNATEHibernate

  • Gestin del acceso a datos

    1.4.1.RELEASE 31

    OPENJPAOpenJPA

    --databaseIdentificador de la base de datos. Los valores posibles son:

    ORACLE. Debido a que los drivers JDBC no estn disponibles en ningn repositorio Maven,en caso de utilizar Oracle habr que instalar manualmente el driver JDBC.

    MSSQL.

    MYSQL.

    POSTGRES.

    SYBASE.

    DB2. Debido a que los drivers JDBC no estn disponibles en ningn repositorio Maven, encaso de utilizar DB2 habr que instalar manualmente el driver JDBC.

    DERBY.

    GOOGLE_APP_ENGINE.

    H2_IN_MEMORY.

    HYPERSONIC_IN_MEMORY.

    HYPERSONIC_PERSISTENT.

    FIREBIRD.

    DATABASE_DOT_COM.

    Los parmetros opcionales que permite este comando son:

    --applicationIdIdentificacin de aplicacin en Google App Engine (slo utilizado para esta base de datos).

    --databaseNameNombre de la base de datos con la que conectar.

    --hostNameEl nombre DNS o la direccin IP del ordenador en el que se encuentra la base de datos a utilizar.

    --jndiDataSourceFuente de datos JNDI a utilizar.

    --passwordContrasea del usuario para la conexin con la base de datos.

    --persistenceUnitNombre de la unidad de persistencia a utilizar en el fichero persistence.xml.

    --transactionManagerNombre del gestor de transacciones a utilizar.

  • Gestin del acceso a datos

    1.4.1.RELEASE 32

    --userNameNombre del usuario para la conexin con la base de datos.

    Dependiendo del tipo de base de datos pueden ser necesarios unos u otros parmetros. Se recomiendausar el completado de comandos con TAB (en la consola del sistema) o CTRL+SPACE (en el IDE) paraque se indique lo que hace falta en funcin del contexto. Cuando el autocompletado no proporcionams opciones para un comando, se recomienda escribir los caracteres -- e ir auto completando paraque aparezcan los parmetros opcionales.

    6.2.2. database properties

    Permite la consulta, eliminacin, actualizacin y creacin de las propiedades de conexin con la base dedatos (a diferencia del comando anterior que configura el sistema de persitencia en su totalidad). Estaspropiedades se almacenan el fichero src/main/resources/META-INF/spring/database.propertiesde la aplicacin.

    Se dispone del siguiente grupo de comandos:

    database properties listLista las propiedades de conexin con la base de datos.

    database properties removeElimina una propiedad de la configuracin. Requiere un nico parmetro --key para especificarla clave a eliminar.

    database properties setCrea o actualiza una propiedad en la configuracin. Requiere un parmetro --key con el nombrede la propiedad y un --value con el valor a establecer.

    6.2.3. Ejemplo: Conectar con PostgreSQLEn este ejemplo se va a configurar la conexin a un servidor PostgreSQL situado en una mquina ende la red local. Los datos de conexin de ejemplo son:

    Servidor de base de datos: dbserver

    Puerto de conexin: 5438

    Nombre de la base de datos: my_db

    Nombre de usuario de la base de datos: user1

    Contrasea del usuario: 1234

    Recordar que estos comando se pueden ejecutar en cualquier momento y tantas veces como se desee.

    Los pasos a seguir para la configuracin son:

    1. Usar el comando persistence setup con los parmetros que disponemos:

    roo-gvNIX> jpa setup --provider HIBERNATE --database POSTGRES --databaseName my_db --userName user1 --password 1234 --hostName dbserverCreated SPRING_CONFIG_ROOT/database.propertiesPlease update your database details in

  • Gestin del acceso a datos

    1.4.1.RELEASE 33

    src/main/resources/META-INF/spring/database.properties.Updated SPRING_CONFIG_ROOT/applicationContext.xmlCreated SRC_MAIN_RESOURCES/META-INF/persistence.xmlUpdated ROOT/pom.xml [added dependencies postgresql:postgresql:9.1-901-1.jdbc4, org.hibernate:hibernate-core:4.2.2.Final, org.hibernate:hibernate-entitymanager:4.2.2.Final, org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final, commons-collections:commons-collections:3.2.1, org.hibernate:hibernate-validator:4.3.1.Final, javax.validation:validation-api:1.0.0.GA, javax.transaction:jta:1.1, org.springframework:spring-jdbc:${spring.version}, org.springframework:spring-orm:${spring.version}, commons-pool:commons-pool:1.5.6, commons-dbcp:commons-dbcp:1.4]roo-gvNIX>

    2. Comprobar como ha quedado la configuracin de la conexin. Para ello usar el comando databaseproperties list:

    roo-gvNIX> database properties listdatabase.driverClassName = org.postgresql.Driverdatabase.password = 1234database.url = jdbc:postgresql://dbserver:5432/my_dbdatabase.username = user1roo-gvNIX>

    Observar que lo nico que falta es configurar el puerto de la base de datos en la propiedaddatabase.url. Observar que el puerto configurado automticamente es el puerto por defecto de labase de datos, sin embargo en este ejemplo el servidor de base de datos utiliza uno distinto.

    3. Configurar la URL de conexin al servidor correctamente usando el comando database propertiesset:

    roo-gvNIX> database properties set --key database.url --value jdbc:postgresql://dbserver:5438/my_db Updated SPRING_CONFIG_ROOT/database.propertiesroo-gvNIX>

    4. Volver a comprobar el estado de los parmetros con el comando database properties list:

    roo-gvNIX> database properties listdatabase.driverClassName = org.postgresql.Driverdatabase.password = 1234database.url = jdbc:postgresql://dbserver:5438/my_dbdatabase.username = user1roo-gvNIX>

    Una vez hecho, la siguiente vez que se arranque la aplicacin usar la nueva conexin de base de datosconfigurada.

    6.2.4. Actualizacin automtica del esquema

    Al crear las entidades y los campos desde la consola mediante los comandos de ingeniera directa, en elarranque de la aplicacin se crea automticamente el esquema de base de datos que se corresponde conel modelo de entidades. Esto no es as cuando se realiza la ingeniera inversa a partir de un esquemade base de datos ya existente.

    Si se desea cambiar este comportamiento para, por ejemplo, que los datos almacenados nodesaparezca en cada arranque seguir los siguientes pasos:

    Editar el archivo src/main/resources/META-INF/persistence.xml

  • Gestin del acceso a datos

    1.4.1.RELEASE 34

    Cambiar el valor de la propiedad hibernate.hbm2ddl.auto:

    Existen cinco valores validate, update, create, create-drop y none. Estos valores deben utilizarsecon precaucin por el peligr" puede suponer para la integridad de la BBDD.

    validate: valida que el modelo de objetos y el modelo relacional de base de datos son equivalentes.En caso de no ser iguales no se permitir el arranque de la aplicacin.

    update: actualiza el esquema al arrancar la aplicacin. Esto es, modificar los elementos delmodelo relacional de base de datos que no se correspondan con el modelo de objetos.

    create: crea el esquema en el arranque de la aplicacin destruyendo la informacin existente.

    create-drop: hace un drop de las tablas al parar la aplicacin y en el arranque las crea.

    none: no hace absolutamente ninguna validacin ni modificacin del esquema.

    6.2.5. Mltiples fuentes de datos

    La conexin con distintas bases de datos est soportada, aunque su configuracin no se generaautomticamente. Distinguir de la conexin con distintos esquemas de la misma base de datos que esttanto soportado como contemplado por la generacin automtica que realiza la ingeniera inversa.

    A continuacin se muestran los pasos a seguir para configurar la conexin con distintas bases de datosen una misma aplicacin mediante el proveedor de persistencia Hibernate:

    En src/main/resources/META-INF/persistence.xml incluir la siguiente configuracin reemplazandolos puntos suspensivos por los valores adecuados para la nueva conexin de base de datos:

    org.hibernate.ejb.HibernatePersistence

    En src/main/resources/META-INF/spring/applicationContext.xml incluir la siguiente configuracinreemplazando los puntos suspensivos por los valores adecuados para la nueva conexin de base dedatos:

  • Gestin del acceso a datos

    1.4.1.RELEASE 35

    En la clase Java de la entidad, por ejemplo, src/main/java/.../domain/Entidad.java aadir enla anotacin @RooJpaActiveRecord el atributo persistenceUnit = "persistenceUnit2" haciendoreferencia a la nueva conexin configurada:

    @RooJpaActiveRecord(persistenceUnit = "persistenceUnit2") class Entity

    De esta forma, para cada entidad de datos se puede asociar la conexin de base de datos que se desee.

  • 1.4.1.RELEASE 36

    Captulo 7. Cdigo generado por gvNIX/Roo7.1. Clases Java y ficheros AJ

    7.1.1. Archivos Java

    Por lo general, la norma que se sigue es mantener la clase Java, el archivo .java, lo ms sencillo posibley por ello, muchas veces, se puede observar que el archivo .java est prcticamente vacio. Contienepoco ms que la declaracin de la clase y anotaciones asociadas a la misma. El resto del cdigo, camposy mtodos se declaran en sus aspectos java de los que se hablar a continuacin.

    7.1.2. Archivos AJ

    Estos son los ficheros que genera automticamente el framework y que contienen las operacionesbsicas, los campos definidos con sus getter y setter, el identificador, etc. En general contine el cdigoque un programador haria de manera rutinaria. Estos ficheros tienen nombres como *_Roo_*.aj y*_gvNIX_*aj. Se trata de aspectos java que no son ms que porciones de cdigo que al compilarel proyecto, se asocian como cdigo de la propia clase Java a la que estn vinculadas. Si se deseapersonalizar alguna de las operaciones bsicas, un getter determinado o aadir nuevas funcionalidades,estas debern realizarse en los ficheros .java. En los ficheros aj no se debe de hacer ningn cambio.El motivo de esto es, que teniendo la consola funcionando, o al arrancarla, se volvera a generar elcdigo automticamente perdiendo las modificaciones que se hubiesen realizado. Y al contrario si enel fichero .java se ha creado el getter personalizandolo, automticamente lo borrara del fichero .aj.

  • 1.4.1.RELEASE 37

    Captulo 8. Gestin de entidadesEl acceso a datos de una aplicacin contiene la infraestructura necesaria para obtener y almacenar lainformacin en, por ejemplo, una base de datos. Este acceso se puede estructurar en una sola capaen la que las entidades definen tanto el modelo de los datos, como sus mtodos de interaccin con labase de datos y la lgica de negocio utilizando entonces un modelo llamado Registro Activo. Existenotros casos ms clsicos como la estructuracin en una capa de entidades, otra de acceso a datos(DAO) y una ltima de servicios con la lgica de negocio; todo ello llamado Servicios y Repositorios.Este captulo se centrar en la generacin de la capa de entidades ya que es el mtodo que se utilizahabitualmente en las aplicaciones desarrolladas con gvNIX y para el cual ha aadido la mayora desus nuevas funcionalidades.

    Las entidades del modelo del dominio son uno de los elementos ms importantes del framework. EnJava una entidad se corresponde con una clase, definida en un archivo .java.

    Adems de la lgica de negocio, cada clase contiene una serie de anotaciones de clase y de atributosque forman parte de la metainformacin que permite a gvNIX realizar acciones automticas.

    Ejemplo 8.1. Una clase Java

    @RooJavaBean@RooToString@RooJpaActiveRecordpublic class Entity1 {

    @Size(max = 20) @NotNull private String name;

    @Size(max = 20) private String apellidos;}

    Anotacin de clase Anotacin de atributo

    El framework aadir todos los mtodos estndar necesarios para completar la definicin de entidad,como los de persistencia (almacenamiento y recuperacin), gets/sets y mtodos auxiliares comotoString. Como se vi en la seccin de generacin de cdigo se crearn una serie de archivos .aj queen tiempo de compilacin se incluyen en la clase de forma transparente.

    Si por algn motivo es necesario personalizar el comportamiento de alguno de los mtodos estndarque se generan, simplemente hay que definirlos en la clase java. Cuando el framework detecta elcambio actualiza el fichero aj correspondiente para eliminar esta definicin.

    Existen dos formas de crear una entidad:

    1. Usando el intrprete de comandos.

    2. Usando el IDE de desarrollo.

  • Gestin de entidades

    1.4.1.RELEASE 38

    8.1. Crear una entidad con el intrprete de comandosDesde el intrprete de comandos se puede crear entidades de forma sencilla con los comandos: entityjpa y field.

    8.1.1. Comando entity jpaEste comando crea una nueva entidad en el proyecto. Requiere como mnimo definir el parmetro --class para especificar el nombre y el paquete de la nueva clase. En este parmetro se puede utilizarel carcter ~ como abreviatura del paquete base del proyecto.

    Entre los parmetros obligatorios se encuentran :

    --classNombre de la clase java para la entidad (incluido su paquete) (recordar que se puede usar el ~ paraespecificar el paquete base de la aplicacin).

    Entre los principales parmetros opcionales (notar que hay ms) se encuentran:

    --activeRecordGenerar los mtodos de creacin, lectura, actualizacin y borrado (CRUD) para esta entidad. Estoimplica el uso de un patrn de entidades del tipo registro activo.

    --entityNameNombre a usar para la entidad. Diferenciar del parmetro tabla que define el nombre de su tablaasociada.

    --identifierTypePermite definir el tipo (clase java) de identificador (clave primaria) que usar esta entidad.

    --identifierFieldNombre del campo en la entidad (no en BBDD) que se usar para el identificador.

    --identifierColumnNombre de la columna de la BBDD donde almacenar el valor de clave primaria.

    --persistenceUnitUnidad de persistencia a utilizar para gestionar la interaccin de la entidad con la base de datos.Como cada unidad de persistencia puede estar asociada a una base de datos distinta, es la formade definir que una entidad se encuentra almacenada en otra base de datos.

    --schemaEsquema de base de datos donde se encontrar la tabla asociada con la entidad.

    --tableNombre de la tabla de la BBDD donde almacenar los datos para esta entidad.

    --testAutomaticallyGenera los test unitarios para esta entidad usando JUnit.

    --versionColumnNombre de la columna en base de datos que se comporta como campo de control de concurrenciaoptimista basado en nmero de versin.

  • Gestin de entidades

    1.4.1.RELEASE 39

    --versionTypeTipo de la columna de base de datos que se comporta como campo de control de concurrenciaoptimista basado en nmero de versin.

    El resto de las opciones podemos verlas con el autocompletado del comando escribiendo --, en ladocumentacin oficial de Roo o usando el comando help entity.

    Eliminar y modificar entidades

    La consola no se utiliza para eliminar o modificar las entidades. Esto se debe realizarusando el IDE. Para ms informacin ver la seccin Modificar una entidad.

    8.1.2. Comando field

    No existe un comando field propiamente dicho, sino que es el nombre de un grupo de comandos quepermiten aadir campos a una entidad. Los comandos finales se forman con el formato field {tipo}donde {tipo} es el tipo de dato que va almacenar. As tenemos los siguientes:

    field stringCrea un campo de tipo cadena alfanumrica.

    field booleanCrea un campo de tipo booleano (valores cierto o falso).

    field dateCrea un campo de tipo fecha.

    field email templateCrea un campo con una plantilla preparada para almacenar direcciones de correo electrnico.

    field embeddedAade un campo del tipo @Embedded

    field enumCrea un campo de tipo enumerado. El tipo enumerado debe haber sido creado previamente conel comando enum type.

    field fileCrea un campo de tipo fichero.

    field numberCrea un campo de tipo numrico (es posible especificarle el tipo mediante el parmetro --type).

    field referenceCrea un campo que ser una referencia a otra entidad.

    field setCrea un campo que devolver una lista de elementos de una entidad relacionados con esteelemento.

    field otherCrea un campo de otro tipo no registrado.

  • Gestin de entidades

    1.4.1.RELEASE 40

    Cada uno de estos comandos admiten bastantes parmetros que permiten definir mltiplescomportamientos especiales, algunos aplicables a todos los comandos y otros especficos solo paraalgunos de ellos. Entre los generales que aplicar a la mayora podemos encontrar los siguientes:

    --classClase entidad dondecrear el campo. Admite el uso de ~ para identificar al paquete base del proyectoy tiene autocompletado. No es necesario de especificar si acabamos de crear una entidad.

    --columnNombre de la columna en BBDD donde se almacenar el valor.

    --fieldNameNombre del campo que vamos a generar.

    --notNull y --nullRequiredEspecifica el comportamiento de campo ante los valores nulos.

    --regexpPermite definir una expresin regular que debe cumplir el valor que se establezca en este campo.

    --sizeMax y --sizeMinLimitaciones de tamao.

    --transientIndica que el campo no tiene asociada ninguna columna en la base de datos, es decir, no se almacenani obtiene de ella.

    --uniqueIndica que el campo tiene la restriccin de unicidad para los valores que puede almacenar.

    Existen ms opciones dependiendo del tipo de dato, para ms informacin ver la ayuda de la consola oacceder a la documentacin oficial de Roo en http://static.springsource.org/spring-roo/reference/html/

    Enlazar modelo de entidades con base de datos existente

    Notar que el parmetro --column permiten que en tiempo de creacin podemos indicarque la entidad sea persistente sobre un modelo relacional creado con anterioridad.

    Eliminar y modificar campos

    No se pueden eliminar o modificar los campos desde lnea de comandos. Esto se deberealizar usando el IDE. Para ms informacin ver la seccin Modificar una entidad.

    8.1.3. Proyecto ejemploCrear el modelo de dominio de la aplicacin de venta de pizzas con la siguiente secuencia de comandosa partir del mismo ejemplo iniciado en captulos anteriores:

    1. Topping:

    roo-gvNIX> entity jpa --class ~.domain.Topping --testAutomatically~.domain.Topping roo-gvNIX> field string --fieldName name --notNull --sizeMin 2

  • Gestin de entidades

    1.4.1.RELEASE 41

    2. Base:

    ~.domain.Topping roo-gvNIX> entity jpa --class ~.domain.Base --testAutomatically~.domain.Base roo-gvNIX> field string --fieldName name --notNull --sizeMin 2

    3. Pizza:

    ~.domain.Base roo-gvNIX> entity jpa --class ~.domain.Pizza --testAutomatically~.domain.Pizza roo-gvNIX> field string --fieldName name --notNull --sizeMin 2 --comment "Nombre de la pizza" --column pizza_nombre --regexp [A-Za-z0-9].*~.domain.Pizza roo-gvNIX> field number --fieldName price --type java.lang.Float~.domain.Pizza roo-gvNIX> field set --fieldName toppings --type ~.domain.Topping~.domain.Pizza roo-gvNIX> field reference --fieldName base --type ~.domain.Base

    Esta secuencia de comandos genera la siguiente clase Java:

    @RooJavaBean@RooToString@RooJpaActiveRecordpublic class Pizza {

    @NotNull @Column(name = "pizza_nombre") @Size(min = 2) @Pattern(regexp = "[A-Za-z0-9].*") private String name;

    private Float price;

    @ManyToMany(cascade = CascadeType.ALL) private Set toppings = new HashS