====== Arquitectura ======
Los ejercicios de esta unidad son para organizar el código y creará una pequeña aplicación web.
===== Ejercicio01 =====
Siguiendo con el **Ejercicio01** de la unidad anterior, haz los siguientes cambios:
* En la clase ''Main'' usa la clase ''HibernateUtil'' para todo lo que se pueda.
* Crea un interfaz ''DAO'' y su implementación con Hibernate para la entidad ''Seguro''.
* Crea un interfaz ''DAO'' y su implementación con Hibernate para la entidad ''AsistenciaMedica''.
* Añade a los campos que lo necesiten la anotación ''@Caption'' para que los nombres de los campos sean mas amigables al mostrar un error.
* Modifica el programa ''Main'' para que ahora utilice la clase DAO de ''Seguro'' y sólo trate con la excepción ''BusinessException''.
* Haz que falle alguna validación para comprobar que las anotación ''@Caption'' funcionan perfectamente.
* Organiza las entidades , los ficheros ''hbm.xml'', los interfaces DAO , las implementaciones DAO , etc. ,en paquetes separados.
===== Ejercicio02 Optativo =====
Este ejercicio es optativo.
* Modifica la clase ''BussinessException'' para que cuando se produce la excepción org.hibernate.exception.ConstraintViolationException|ConstraintViolationException se muestre un mensaje que corresponda exactamente al error que ha ocurrido.Para ello deberás usar los métodos org.hibernate.exception.ConstraintViolationException#getErrorCode()|getErrorCode() y org.hibernate.exception.ConstraintViolationException#getSQLState()|getSQLState() teniendo en cuenta los códigos específicos de MySQL. La lista completa se encuentra en [[http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html|Server Error Codes and Messages]]
* Modifica de nuevo la clase ''BussinessException'' para que sea fácilmente ampliable a varios tipos de bases de datos. Para ayudarte te propongo el siguiente diagrama UML.
class DataBaseErrorTranslator <>
DataBaseErrorTranslator : BussinessMessage getBussinessMessage(String message,int erroCode,String sqlState)
class DataBaseErrorTranslatorImplMySQL
class DataBaseErrorTranslatorImplOracle
DataBaseErrorTranslator <|.. DataBaseErrorTranslatorImplMySQL
DataBaseErrorTranslator <|.. DataBaseErrorTranslatorImplOracle
===== Ejercicio03 Optativo =====
Este ejercicio es optativo.
En el tratamiento de excepciones hemos visto como hacer que al mostrar el mensaje se vea el //caption// del campo en vez de el nombre de la propiedad Java. Ésta que es una ventaja también puede ser un inconveniente ya que desde la capa de presentación no podríamos asociar un mensaje de error con el //input// de dicho campos. Ya que no sabemos el nombre de la propiedad a la que está asociada dicho mensaje error.
El ejercicio consiste en evitar ese inconveniente mientras se sigue con la ventaja del //caption//.
Modifica la clase "BussinessMessage" para que se incluya tanto la propiedad ''fieldName'' como ''caption''. De esa forma se podrán usar ambas sin inconvenientes.
class BussinessMessage
BussinessMessage : getFieldName()
BussinessMessage : getFieldCaption()
BussinessMessage : getMessage()
Para poder realizar hacer cambio también deberás modificar la clase ''BussinessException''