MVC, Struts, Hibernate y mi experiencia
Este trimestre estuve trabajando en un sistema para las coordinaciones de la universidad, el desarrollo requería que el sistema permita a las coordinaciones de cada carrera manejar los programas (penso), ofertas de materias y por último grupos de investigación (con personas asociadas: profesores, estudiantes y otros) y sus seminarios (charlas). Este desarrollo lo hicimos en el [...]
Este trimestre estuve trabajando en un sistema para las coordinaciones de la universidad, el desarrollo requería que el sistema permita a las coordinaciones de cada carrera manejar los programas (penso), ofertas de materias y por último grupos de investigación (con personas asociadas: profesores, estudiantes y otros) y sus seminarios (charlas).
Este desarrollo lo hicimos en el contexto de la materia Taller de Desarrollo de Software. En general el resultado final fue aceptable y considerando todos los tropiezos y problemas que tuvimos que solucionar diría que muy bueno. Con una semana de trabajo más (toda la semana santa trabajando) logramos implementar todas las funcionalidades requeridas y le mejoramos la funcionalidad con AJAX.
Plataforma de desarrollo
La materia exigía que el sistema se desarrollara sobre Struts+Hibernate. Struts es un framework de desarrollo para aplicaciones web sobre Java, basado en la arquitectura Model-View-Controller (Modelo Vista Controlador) que separa en tres componentes los datos (Modelo), la interfaz con el usuario (Vista) y la lógica del sistema (Controlador).
Trabajar con MVC permite mantener un código más limpio y manejable ya que separa en archivos distintos las distintas partes del sistema y es más fácil corregir los errores que puedan encontrarse.
Cuando iniciamos este desarrollo ya teníamos conocimiento y habíamos usado muchas veces el paradigma MVC por lo que no nos enfrentábamos a la tarea completamente ignorantes. Ya en varias ocaciones habíamos usado el framework cakePHP que trabaja con MVC. Lo que si no conocíamos era el desarrollo de aplicaciones web con Java, mucho menos Struts y Hibernate.
Struts
Struts es, como ya lo dije, el framework que nos usariamos para llevara al entorno Java el sencillo paradigma MVC: colocar el código que lee la base de datos, el que procesa los datos y el que genera la interfáz con el usuario en lugares separados para promover el orden y disminuir el código espaguetti.
Struts implementa las vistas usando un plugin llamado tiles que nos permitió hacer un esqueleto o layout de las páginas y las llenabamos con archivos jsp. Cada acción (crear una materia, modificar una materia, etc.) del sistema que se implementa usando un archivo java, es decir que ya ibamos creando 4 archivos para las operaciones básicas CRUD (acrónimo que se refiere a las operaciones crear, leer, actualizar y eliminar) por cada entidad (materia, profesor, etc) que debíamos hacer. Adicionalmente cada archivo java debía indicarle a struts qué ruta debía toma: las rutas las definíamos en una archivo xml en el cual se hacían definiciones en función de otras que se encontraban en otro archivo xml, el cual definía cuales archivos jsp iban a llenar los espacios del layout.
En total teníamos entonces 4 archivos java que ejecutaban las acciones básicas y por cada archivo se creaban unas 4 líneas en el primer xml y otras 3 en el otro. Es decir 4 archivos significaban 28 líneas de xml más las líneas de java (que no suelen ser pocas).
El manejo de tantas archivos fue el gran karma que tuvimos contra struts. Y el manejo de todas las configuraciones a través de archivos xml interminables fue realmente insoportable.
Hibernate
Hibernate es un servicio que permite comunicar con la base de datos de manera orientada a objetos: representa cada entidad de la base de datos como un objeto al que puede modificarse sus atributos y así modificar la base de datos real. Nuevamente Hibernate requería también manejar archivos de configuración para manejar la información necesaria para comunicarse con la base de datos. Esta vez logramos zafarnos de la creación manual de los archivos (uno por cada entidad) usando un plugin llamado xdoclet que lee comentarios en el archivo java y genera de ahí dichos archivos de configuración.
Ademas de ello necesita una clase java más que se encargue de generar las sesiones con la base de datos (una factoría).
Los problemas que se nos presentaron mientras trabajábamos con hibernate fue su inestabilidad (no sabemos la razón exacta ya que no somos expertos en ello): hubo un día que de cada dos solicitudes una generaba una excepción. Literalmente fue así, lo más interesante es que era constante: una vez sí otra no. :S
En resumen
La curva de aprendizaje de estos dos componentes (Hbernate + Struts) y el xdoclet fue de 9 semanas (para lograr entender poder decir que teníamos los conocimientos básicos para trabajar a buena marcha). Y en un trimestre de 12 semanas eso es mortal para las esperanzas que teníamos para la calidad del producto final dada la experiencia que teníamos (3 años de desarrollo web y 1 con MVC). Se imaginarán cómo nos sentíamos al ver que en sólo tres semana debíamos desarrollar lo que en 9 no habíamos podido. Tanta fue la depresión que solicitamos al profesor cambiar a nuestro, sin embargo el uso de struts era “imprescindible”.
Cada vez que decíamos “ahora sí vamos a avanzar” aparecían un problema nuevo que debíamos aprender a solucionar.
Producto final
Como dije, tuvimos que trabajar una semana más para poder entregar algo más o menos completo. El profesor lo revisó y, a pesar de que tuvimos problemas de última hora con el servidor de svn que no le provocó recibir los últimos cambios (o soñé que los había mandado), le pareció que se veía bien (aun con el comportamiento errático de hibernate). Habíamos logrado la meta, pero nos pidió que nos asegurásemos de que no iba a estar tan errático en la demo a las coordinaciones. :S
Por otro lado dicho proyecto seguirá pero debido a las muchas maldiciones e improperios lanzados contra struts, su creador y demás allegador… fue difícil convencer a alguien de que tomara la materia para continuar con el trabajo…
Por otro lado agregar AJAX a la aplicación no fue tan difícil, del lado del servidor significó duplicar el número de líneas de xml, agregar una clase más a la aplicación y unas 5 líneas más a cada acción… casi nada
Del lado del cliente, trabajamos con Mootools y el desarrollo fue muy sencillo. Un par de archivos y ya teníamos formularios y enlaces “ajaxy”. Esta librería me sacó un poco de mis desdichas. La implementación de AJAX aún está muy cruda (faltan chequeo de errores http, de tiempo de respuesta y mejorar la accesibilidad) pero el resultado es genial (a persar de los extraños cache que tiene struts con sus formularios guardados en la sesión)
Conclusiones
- Aprendimos struts y hibernate, aún cuando no somos expertos hemos llegado a un nivel en que son pocos los errores que nos parecen tan esotéricos que nos hacen cerrar el netbeans e irnos a ver tele.
- No nos gusta Struts y esperamos no tener que verlo nuevamente en frente a nosotros.
- Si están buscando un desarrollador web en el entorno Java y/o Struts, gracias pero… ¿no podríamos usar cakePHP?
- Este trimestre confirmé que MVC es genial pero la implementación de Struts no es la mejor.
- Me gustaría aprender otro lenguaje de desarrollo agil, tal vez Ruby On Rails o Django.
Recibe otros artículos como este automáticamente
Suscríbete vía RSS a aikon.com.ve ||
¿Qué es RSS?
aikon.com.ve » Blog Archive » Two problems with Ultimate Tag Warrior:
[...] my Wordpress to version 2.1.3 after that I found found that I could not save my last post about Struts and MVC because some words where triggering one of mod security rules that are enabled on my server. After [...]
Abril 11, 2007 // 15:11
Joaquín y Lorenzo, los nuevos gurües del STRUTS…
)
No te preocupes, algún incauto caerá en las redes del perverso STRUTS en taller de desarrollo de software y continuarán tu obra, algún día estará terminado y listo (al igual que el sitio de reserva
Abril 16, 2007 // 23:51
…io soy ahora quien esta batallando con Struts.. pero..no me parece tan dificil!!..
la pequeña diferencia que encuentro es que yo uso MyEclipse… wow!! es una maravilla!!.. y Struts.. se vuelve cosa de niños!!.. pruébalo!!!.. lo recomiendo ampliamente…
Abril 1, 2008 // 14:46
Hola Armando, tengo entendido que con MyEclipse las cosas son más fáciles, pero en ese momento no teníamos forma de obtener una licencia. Por otro lado, siempre habíamos usado Netbeans y ese no ayuda tanto como MyEclipse.
Gracias por tu recomendación. Talvez, algún día… Dejame recomendarte algo a ti: CakePHP.
Abril 1, 2008 // 20:07
Hola, io también intento trabajar con struts+hibernate estoy de acuerdo myeclipse ayuda mucho, pero tengo problemas con el servidor web, qué servidor web usaste tú?
Julio 11, 2008 // 17:08
Hola Xo,
Nosotros utilizamos Netbeans para el desarrollo. Netbean trae su servidor tomcat y se encarga de hacer el deploy automáticamente por lo que nunca tuvimos problema con eso.
Suerte
Julio 11, 2008 // 17:45
Hola Oye me encuentro en una situacion semejante a la tuya pero en otra universidad, ya he podido hacer funcionar la parte de struts pero en relacion a hibernate no he podido avanzar gran cosa, podrias decirme con que version trabajste tu, y ya abusando de tu amabilidad como instalo hibernate para que trabaje con netbeans tengo entendido que necesito usar un plugin.
Julio 22, 2008 // 20:40
Hola Darío,
Nosotros utilizamos el plugin de hibernate para netbeans: http://nbxdoclet.sourceforge.net/index.php
Ahí tienes un video que te explica cómo instalar y utilizarlo.
Muchar suerte.
Saludos
Julio 22, 2008 // 20:46
Muchas gracias
Noviembre 3, 2008 // 11:21