Table Of ContentAprende
OpenXava
con ejemplos
EDICIÓN 1.1 LITE
© 2011 Javier Paniza
iii
Sobre el libro
El propósito de este libro es enseñarte a desarrollar aplicaciones Java Web de
gestión usando OpenXava y otras tecnologías, herramientas y marcos de trabajo
relacionados. El camino para conseguir este objetivo va a ser desarrollar una
aplicación desde cero, paso a paso, hasta obtener una aplicación de gestión
completamente funcional.
¿Por qué un libro sobre OpenXava? Ya tenemos un montón de documentación
gratuita. Sí, es cierto. De hecho, durante algún tiempo yo mismo pensaba que la
documentación oficial de OpenXava, que es bastante exhaustiva y siempre está
actualiza, era suficiente para aprender OpenXava. Sin embargo, algunos
miembros de las comunidad OpenXava me pedían un libro, y esto hizo que
empezara a pensar que lo de escribir un libro no era tan mala idea al fin y al cabo.
La documentación de OpenXava describe con precisión toda la sintaxis de
OpenXava junto con su semántica. Sin duda, es una herramienta esencial que
permite conocer todos los secretos de OpenXava. Pero, si eres principiante en el
mundo Java Enterprise puede ser que necesites algo más que una documentación
de referencia. Querrás tener mucho código de ejemplo y también aprender las
demás tecnologías necesarias para crear una aplicación final.
En este libro aprenderás, no solo OpenXava, sino también JPA, Eclipse,
PostgreSQL, JUnit, HtmlUnit, Hibernate Validator framework, Liferay, etc. Y lo
más importante, vas a aprender técnicas para resolver casos comunes y avanzados
a los que te enfrentarás al desarrollar aplicaciones de gestión.
No dudes en contactar conmigo para darme tu opinión y sugerencias sobre el
libro. Hazlo en [email protected].
Gracias especiales para Emiliano Torres, César Llave Llerena y Gerardo
Gómez Caminero por sus correcciones.
iv
Contenido
Capítulo 1: Arquitectura y filosofía 1
1.1 Los conceptos 2
Desarrollo Dirigido por el Modelo Ligero 2
Componente de Negocio 3
1.2 Arquitectura de la aplicación 6
Perspectiva del desarrollador de aplicaciones 6
Perspectiva del usuario 7
Estructura del proyecto 8
1.3 Flexibilidad 9
Editores 9
Vista personalizada 10
1.4 Resumen 10
Capítulo 2: Java Persistence API 12
2.1 Anotaciones JPA 13
Entidad 13
Propiedades 14
Referencias 16
Clases incrustables 17
Colecciones 18
2.2 API JPA 20
2.3 Resumen 22
Capítulo 3: Anotaciones 23
3.1 Validación 24
Validación declarativa 24
Validaciones predefinidas 24
Validación propia 26
Aprende más sobre validaciones 27
3.2 Interfaz de usuario 28
La interfaz de usuario por defecto 28
La anotación @View 29
Refinando la presentación de los miembros 30
Aprende más acerca de la interfaz de usuario 33
3.3 Otras anotaciones 34
3.4 Resumen 34
v
Capítulo 4: Empezando con Eclipse y PostgreSQL 36
4.1 Nuestro objetivo: Una pequeña aplicación de facturación 37
4.2 Instalar PostgreSQL 37
4.3 Crear el proyecto en Eclipse 39
Instalar OpenXava 40
Crear el proyecto 40
Configurar Tomcat dentro de Eclipse 42
Crear tu primera entidad 44
4.4 Preparar la base de datos 46
Configurar persistence.xml 46
Actualizar esquema 47
4.5 Ejecutar la aplicación 49
4.6 Modificar la aplicación 50
4.7 Acceder a la base de dato desde Eclipse 51
4.8 Resumen 54
Capítulo 5: Modelar con Java 55
5.1 Modelo básico del dominio 56
Referencia (ManyToOne) como lista de descripciones (combo) 56
Estereotipos 58
Embeddable 59
Clave compuesta 61
Calcular valores por defecto 63
Referencias convencionales (ManyToOne) 65
Colección de entidades dependientes (ManyToOne con cascade) 66
5.2 Refinar la interfaz de usuario 68
Interfaz de usuario por defecto 69
Usar @View para definir la disposición 70
Usar @ReferenceView para refinar la interfaz de referencias 70
Refinar la introducción de elementos de colección 71
La interfaz de usuario refinada 73
5.3 Desarrollo ágil 74
5.4 Resumen 77
Capítulo 6: Pruebas automáticas 79
6.1 JUnit 80
6.2 ModuleTestBase para probar módulos 80
El código para la prueba 80
Ejecutar las pruebas desde Eclipse 82
vi
6.3 Añadir el controlador JDBC al path de Java 84
6.4 Crear datos de prueba usando JPA 85
Los métodos setUp() y tearDown() 85
Crear datos con JPA 86
Borrar datos con JPA 88
Filtrar datos desde modo lista en una prueba 88
Usar instancias de entidad dentro de una prueba 89
6.5 Usar datos ya existentes para probar 90
6.6 Probar colecciones 91
Dividir la prueba en varios métodos 91
Verificar valores por defecto 93
Entrada de datos 94
Verificar los datos 95
6.7 Suite 96
6.8 Resumen 97
Capítulo 7: Herencia 99
7.1 Heredar de una superclase mapeada 100
7.2 Herencia de entidades 102
Nueva entidad Order 102
CommercialDocument como entidad abstracta 103
Invoice refactorizada para usar herencia 104
Crear Order usando herencia 105
Convención de nombres y herencia 106
Asociar Order con Invoice 106
7.3 Herencia de vistas 107
El atributo extendsView 107
Vista para Invoice usando herencia 108
Vista para Order usando herencia 110
Usar @ReferenceView y @CollectionView para refinar vistas 111
7.4 Herencia en las pruebas JUnit 113
Crear una prueba de módulo abstracta 113
Prueba base abstracta para crear pruebas de módulo concretas 115
Añadir nuevas pruebas a las pruebas de módulo extendidas 115
7.5 Resumen 117
Capítulo 8: Lógica de negocio básica 119
8.1 Propiedades calculadas 120
Propiedad calculada simple 120
Usar @DefaultValueCalculator 121
vii
Propiedades calculadas dependientes de una colección 124
Valor por defecto desde un archivo de propiedades 126
8.2 Métodos de retrollamada JPA 128
Cálculo de valor por defecto multiusuario 128
Sincronizar propiedades persistentes y calculadas 130
8.3 Lógica desde la base de datos (@Formula) 132
8.4 Pruebas JUnit 134
Modificar la prueba existente 134
Verificar valores por defecto y propiedades calculadas 136
Sincronización entre propiedad persistente y calculada / @Formula 137
8.5 Resumen 139
Capítulo 9: Validación avanzada 141
9.1 Alternativas de validación 142
Añadir la propiedad delivered a Order 142
Validar con @EntityValidator 143
Validar con métodos de retrollamada JPA 144
Validar en el setter 145
Validar con Hibernate Validator 146
Validar al borrar con @RemoveValidator 146
Validar al borrar con un método de retrollamada JPA 148
¿Cuál es la mejor forma de validar? 148
9.2 Crear tu propia anotación de Hibernate Validator 149
Usar un Hibernate Validator en tu entidad 149
Definir tu propia anotación ISBN 150
Usar Apache Commons Validator para implementar la lógica 150
Llamar a un servicio web REST para validar el ISBN 152
Añadir atributos a tu anotación 154
9.3 Pruebas JUnit 155
Probar la validación al añadir a una colección 155
Probar validación al asignar una referencia y al borrar 157
Probar el Hibernate Validator propio 158
9.4 Resumen 159
Capítulo 10: Refinar el comportamiento predefinido 161
10.1 Acciones personalizadas 162
Controlador Typical 162
Refinar el controlador para un módulo 164
Escribir tu propia acción 165
10.2 Acciones genéricas 168
viii
Código genérico con MapFacade 168
Cambiar el controlador por defecto para todos los módulos 170
Volvamos un momento al modelo 171
Metadatos para un código más genérico 173
Acciones encadenadas 174
Refinar la acción de búsqueda por defecto 175
10.3 Modo lista 179
Filtrar datos tabulares 180
Acciones de lista 180
10.4 Reutilizar el código de las acciones 183
Propiedades para crear acciones reutilizables 183
Módulos personalizados 184
Varias definiciones de datos tabulares por entidad 185
Obsesión por reutilizar 186
10.5 Pruebas JUnit 187
Probar el comportamiento personalizado para borrar 187
Probar varios módulos en el mismo método de prueba 188
10.6 Resumen 191
Capítulo 11: Comportamiento y lógica de negocio 193
11.1 Lógica de negocio desde el modo detalle 194
Crear una acción para ejecutar lógica personalizada 195
Escribiendo la lógica de negocio real en la entidad 196
Escribe menos código usando Apache Commons BeanUtils 197
Copiar una colección de entidad a entidad 198
Excepciones de aplicación 199
Validar desde la acción 200
Evento OnChange para ocultar/mostrar una acción por código 202
11.2 Lógica de negocio desde el modo lista 205
Acción de lista con lógica propia 205
Lógica de negocio en el modelo sobre varias entidades 207
11.3 Cambiar de módulo 209
Uso de IChangeModuleAction 210
Módulo de solo detalle 211
Volviendo al módulo que llamó 212
Objeto de sesión global y acción on-init 213
11.4 Pruebas JUnit 216
Probar la acción de modo detalle 216
Buscar una entidad para la prueba usando el modo lista y JPA 218
Probar que la acción se oculta cuando no aplica 219
ix
Probar la acción de modo lista 220
Verificar datos de prueba 221
Probar casos excepcionales 222
11.5 Resumen 223
Capítulo 12: Referencias y colecciones 225
12.1 Refinar el comportamiento de las referencias 226
Las validaciones están bien, pero no son suficientes 226
Modificar los datos tabulares por defecto ayuda 227
Refinar la acción para buscar una referencia con una lista 228
Buscar la referencia tecleando en los campos 230
Refinar la acción para buscar cuando se teclea la clave 231
12.2 Refinar el comportamiento de las colecciones 234
Modificar los datos tabulares ayuda 234
Refinar la lista para añadir elementos a la colección 235
Refinar la acción que añade elementos a la colección 237
12.3 Pruebas JUnit 240
Adaptar OrderTest 240
Probar @SearchAction 241
Probar @OnChangeSearch 242
Adaptar InvoiceTest 243
Probar @NewAction 244
Probar la acción para añadir elementos a la colección 247
12.4 Resumen 249
Capítulo 13: Seguridad y navegación con Liferay 251
13.1 Introducción a los portales Java 252
13.2 Instalar Liferay 253
13.3 Desplegar nuestra aplicación en Liferay 254
13.4 Navegación 256
Añadir las páginas para la aplicación y sus módulos 256
Llenar una página vacía con un Portlet 258
Añadir un menú de navegación 258
Copiar una página 259
Dos módulos en la misma página 260
Usar el CMS 262
13.5 Gestión de usuarios 264
Roles 264
Usuarios 265
13.6 Niveles de acceso 267
x
Limitar el acceso a toda la aplicación 267
Limitar el acceso a módulos individuales 268
Limitar funcionalidad 269
Limitar la visibilidad de los datos en modo lista 270
Limitar la visibilidad de los datos en modo detalle 272
13.7 Pruebas JUnit 274
13.8 Resumen 276
Apéndice A: Código fuente 277
Apéndice B: Aprender más 325
Description:actualiza, era suficiente para aprender OpenXava. Sin embargo, algunos En este libro aprenderás, no solo OpenXava, sino también JPA, Eclipse,.