Está en la página 1de 23

9|

Tecnologas
Se propone el uso del framework SEAM como ncleo de la arquitectura. SEAM combina muchas de las tecnologas ms modernas en el mbito del desarrollo de aplicaciones web en entornos J2EE. SEAM simplifica el desarrollo de las aplicaciones web, integrando de forma natural las principales tecnologas, y va comino de establecerse como el estndar de facto para el desarrollo, superando en flexibilidad y potencia, a la conocida arquitectura Struts+Spring. Los principales componentes de una aplicacin SEAM son los siguientes: Facelets Es un sistema de plantillas para JSF mediante el cual nos independizamos del estilo visual usado en las pginas, de forma que se permitir en un futuro realizar cambios en el aspecto y los estilos de la aplicacin de una forma fcil y elegante. Richfaces Mediante el uso de componentes visuales de JSF, se lograr crear la aplicacin de forma simple, encapsulando la mayora de la lgica en componentes visuales, que generen editores de texto, lista de valores dinmicas, o campos de texto con funciones de auto completar texto. Se propone la utilizacin de Richfaces que aparte de un gran nmero de componentes predefinidos y adems ofrece funcionalidades AJAX a distintos niveles. JSF Es la especificacin de SUN para construccin de aplicaciones web que siguen el patrn Modelo-Vista-Controlador. SEAM Es un framework que facilita enormemente el desarrollo de las aplicaciones. Seam integra de forma natural JSF y JPA, incluyendo un motor de biyeccin, ms avanzado que Spring. Seam es un framework cuyo principio es configurar lo menos posible. Seam es uno de los frameworks ms modernos existentes en la actualidad, con un proyeccin muy importante a corto plazo y unas caractersticas sorprendentes. JPA/Hibernate Java Persistence API es una especificacin de SUN para la capa de persistencia, integrando las mejores caractersticas de Hibernate, TopLink, y JDO, proporcionando a las aplicaciones, un estndar potente, pero fcil de utilizar a la hora de acceder a los datos. Hibernate actualmente soporta JPA por lo que hace esta combinacin, la ms adecuada. JPA/Hibernate gestiona todo el acceso a datos, de forma que no tendremos que preocuparnos por que tipo de base de datos se a utilizar. Una de las principales ventajas es tener independencia con respecto al sistema gestor de base de datos, por lo que se puede elegir sin ningn tipo de restriccin MySql, PostgreSQL, Oracle, etc.

Maven Es un sistema de gestin de proyecto desarrollado por Apache para facilitar la organizacin, construccin y despliegue de las aplicaciones. Maven es un entorno extensible que proporciona mecanismos para realizar cualquiera de las operaciones tpicas durante el ciclo de vida de las aplicaciones. Permite compilar, ejecutar los test, generar informes sobre la aplicacin, javadocs, crear los paquetes (.jar o .war) de las aplicaciones, en incluso desplegarlos en el servidor de aplicaciones. Maven es por tanto una herramienta imprescindible en proyectos modernos, ya que no solo normalizan y estandarizan la forma de trabajar, si no que beneficia a los desarrolladores y a los propios administradores de sistemas, proporcionando un mtodo simple de actualizar, compilar y desplegar las aplicaciones.

Freemarker Freemarker es un motor de plantillas, una herramienta para generar salida de texto basada en plantillas. Es un paquete Java, una librera de clases para programadores Java. No es una aplicacin para end-users en s misma, sino algo que los programadores pueden embeber en sus productos.

A continuacin, se pasar a detallar un poco ms todas estas tecnologas y otras ms que se van a usar en el desarrollo de este proyecto.

9.1 |Facelets
JavaServer Facelets es un framework para plantillas (templates) centrado en la tecnologa JSF (JavaServer Faces), por lo cual se integran de manera muy fcil. Este framework incluye muchas caractersticas siendo las ms importantes: Tiempo de desarrollo cero de los tags para UIComponents Facilidad en la creacin del templating para los components y pginas Habilidad de separar los UIComponents en diferentes archivos Un buen sistema de reporte de errores Soporte completo a EL (Expresion Language) Validacin de EL en tiempo de construccin No es necesaria configuracin XML Trabaja con cualquier RenderKit

Desafortunadamente JSP (JavasServer Pages) y JSF no se complementan naturalmente, cuando se usan juntos ambos escriben output al response, pero lo hacen de una manera diferente: JSP procesa los elementos de la pgina de arriba a abajo, mientras que JSF dicta su propio re-rendering (ya que su ciclo de vida est dividido en fases marcadas). Facelets llena este vaco entre JSP y JSF, siendo una tecnologa centrada en crear rboles de componentes y estar relacionado con el complejo ciclo de vida JSF.

Por qu Facelets? No depende de un contenedor Web.

Integrar JSP con JSF trae problemas, adems, no se puede usar JSTL (JavaServer Pages Standar Tag Library) con JSF, cosa que Facelets s provee. - Facelets provee un proceso de compilacin ms rpido que JSP. - Provee templating, lo cual implica reutilizacin de cdigo, simplificacin de desarrollo y facilidad en el mantenimiento de grandes aplicaciones. - Permite crear componentes ligeros sin necesidad de crear los tags de los UIComponents (es ms fcil comparado a crear un componente JSF puro). - Soporta Unified Expression Language, incluyendo soporte para funciones EL y validacin de EL en tiempo de compilacin. Templating Existen tres maneras de modularizar las pginas y componentes: includes, archivos tag y decorators. Pero primero algo bsico de templating: La pgina que contendr al template:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jstl/core"> <head> <ui:insert name="head"/> </head> <body> <div class="body"> <ui:insert name="body"> Contenido por defecto </ui:insert> </div> </body> </html>

El template en s:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jstl/core" template="/template.xhtml"> <!-- ntese el uso del atributo 'template' --> <ui:define name="head"> <!-- contenido de la cabecera --> </ui:define> <ui:define name="body"> <!-- contenido del cuerpo --> </ui:define> </ui:composition>

Como puede verse donde uno quiere que se inserte cdigo se usa el tag <ui:insert name=nombre/> donde nombre corresponde al identificador de la seccin.

Tres maneras de modularizar con Facelets Esta es la porcin de cdigo que se abstraer para los ejemplos siguientes:
<ui:composition> Bienvenido, #{usuario.nombre} </ui:composition>

Templating mediante includes Este es el mtodo ms familiar para modularizar componentes (se le pueden pasar parmetros al ui:include).
<span id="loginDisplay"> <ui:include src="/contenido/bienvenido.xhtml" > <ui:param name="usuario" value="#{usuarioActual}"/> </ui:include> </span>

Templating mediante un tag file Para esta manera de templating, al tag se le da un namespace, por ejemplo:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jstl/core" xmlns:my="http://www.mycompany.com/jsf"> ... <!-- uso del tag --> <my:bienvenido usuario="#{usuarioActual}" /> ... </ui:composition>

Cmo especificamos el tag? En un archivo xml, que es una librera de tags Facelets. Este archivo es cargado automticamente por Facelets, para ello debe tener la extensin *.taglib.xml y estar ubicado en el directorio especial META-INF.
<facelet-taglib> <namespace>http://www.mycompany.com/jsf</namespace> <tag> <tag-name>bienvenido</tag-name> <source>contenido/bienvenido.xhtml</source> </tag> ... <!-- otros tags --> </facelet-taglib>

Templating mediante decorators Los decorators se pueden usar de la misma manera que los compositions, pero stos pueden ser insertados en la pgina (inline).
El texto anterior se mostrar. <ui:decorate template="/contenido/bienvenido.xhtml"> <ui:param name="usuario" value="#{usuarioActual}" /> </ui:decorate> El texto posterior se mostrar.

Un uso prctico del decorator es cuando no tiene muchos sentido abstraer el componente en un archivo aparte, pero s usar las ventajas del templating.

Conclusin El uso de templating trae consigo las ventajas de tener un cdigo ordenado (sobre todo en aplicaciones grandes), fcil de desarrollar y reusar. Uno pude crear componentes o templates que abarcan desde simplemente mostrar texto hasta crear componentes que muestren un checkbox, un input o un dropdown.

9.2| Richfaces
Existen varias implementaciones de JSF basadas en AJAX disponibles en la actualidad. Es posible crear componentes propios y ponerlos en prctica mediante funcionalidad AJAX, sin embargo, esto podra hacer que se tomara demasiado tiempo en el desarrollo. Estas implementaciones proporcionan facilidad de desarrollo y reutilizacin; es por ello por lo que muchos desarrolladores se decantan por este tipo de herramientas. Existen diversas implementaciones basadas en AJAX, como son Ajax4JSF, TomaHawk, Richfaces, Trinidad, IceFaces, y muchos otros. Todas ofrecen uno o ms componentes a los desarrolladores para ahorrar tiempo. No obstante, cada una es diferente a otra. Dentro de este conjunto, las implementaciones Ajax4JSF, Richfaces y IceFaces son las que cobran mayor importancia debido a su divulgacin entre la comunidad web. Richfaces es un framework de cdigo abierto que aade capacidad Ajax dentro de aplicaciones JSF existentes sin recurrir a JavaScript. RichFaces incluye ciclo de vida, validaciones, conversores y la gestin de recursos estticos y dinmicos. Los componentes de Richfaces estn construidos con soporte Ajax y un alto grado de personalizacin del lookand-feel que puede ser fcilmente incorporado dentro de las aplicaciones JSF.

Ventajas e inconvenientes Richfaces proporciona un editor de texto enriquecido basado en TinyMCE muestra las barras de herramientas necesarias para dar un formato enriquecido al texto, tales como botones negrita, itlica, subrayado. Alineacin derecha, izquierda, justificada, agregar vietas o numeracin, enlace, imagen. Creacin de tablas y modificacin de nmero de columnas y renglones. Permite agregar capacidades de prediccin de texto a un campo de entrada, se le puede indicar el mnimo de caracteres requeridos para mostrar la prediccin del texto y la lista sugerida puede contener imgenes, no solo texto.

Richfaces proporciona un componente de ventana modal al cual se pueden asignar acciones a distintos eventos: onbeforeshow, onhide, onmove, onresiza, onmaskmouseout. El estado del contenido de la ventana modal despus de hacer submit puede ser guardado. Richfaces permite seleccionar el modo de la peticin de datos de varios componentes visuales, por ejemplo pestaas y rbol de opciones, los modos son servidor, ajax y cliente. Una lista de registros puede ser paginada de manera muy sencilla, mostrando pgina a pgina los registros mediante un control de botones de avance y retroceso. Es importante conocer a fondo las capacidades de cada control de interfaz, para aprovechar todas las ventajas que proporcione y evitar as retrabajo.

Versiones La ltima versin liberada de Richfaces es la 3.3.2, publicada en octubre del 2009. Esta versin incorpora un conjunto considerable de mejoras y nuevas funcionalidades como las etiquetas para layout (disposicin de los elementos) de la pgina. Requisitos e incompatibilidades Richfaces fue desarrollado con una arquitectura de cdigo abierto para ser compatible con la ms amplia variedad de entornos. Para poder trabajar con Richfaces 3.3.2 es necesario que el servidor de aplicaciones soporte la especificacin JSF 1.2 Versiones de Java soportadas: JDK 1.5 y superiores

Implementaciones de JavaServer Faces soportadas: Mojarra (Sun JSF) 1.2.x MyFaces 1.2.x

Otros frameworks JSF soportados Facelets 1.1.15 Seam 2.x

Servidores soportados Apache Tomcat 5.5 y 6.0 JBoss 4.2.x y 5.1 Glassfish 2.1.1 Weblogic Server 10 IBM WebSphere Jetty Geronimo NetWeaver

Navegadores admitidos Internet Explorer 6.0 8.0

Firefox 2.0 3.5 Opera Nestcape Safari

Interaccin con otros componentes Richfaces se integra con diferentes componentes para poder realizar aplicaciones ms potentes: Sun JSF RI Richfaces trabaja con cualquier implementacin de JSF (1.14 y 1.2) y con la mayora de las bibliotecas de componentes JSF sin ninguna configuracin adicional Apache MyFaces Richfaces trabaja con todos Apache MyFaces versiones (1.1.1 1.1.6), incluidas las bibliotecas especficas como Tomahawk, Sandbox y Trinidad (el anterior ADF Faces). Sin embargo, hay algunas consideraciones a tener en cuenta para la configuracin de las aplicaciones para trabajar con MyFaces y Richfaces. Hay algunos problemas con diferentes filtros definidos en el archivo web.xml. Para evitar estos problemas, el filtro de RichFaces debe ser el primero entre otros filtros dentro del archivo de configuracin web.xml. An ms, existen algunos problemas si se opta por utilizar MyFaces + Seam. Si se usa esta combinacin, se debe usar el tag a4j:page dentro del f:view. Facelets RichFaces ofrece un alto nivel de soporte para Facelets. Cuando se trabaja con Richfaces, no hay diferencia entra las diferentes releases de Facelets que se utilizan JBoss Seam Una de las novedades de Richfaces 3.1 es la integracin con JBoss Seam. Esto mejora an ms la experiencia del usuario mediante la simplificacin de la configuracin y el plumbing code, as como la presentacin de estado y la concurrencia para la gestin de Ajax.

9.3| JSF
La tecnologa JavaServer Faces es un framework de interfaz de componentes de usuarios del lado del servidor para las aplicaciones web basadas en la tecnologa Java. Los principales componentes de la tecnologa JSF son: Una API para: Representar componentes de Interfaz de Usuario (UI) y gestionar su estado. o Manejar eventos, validar en el servidor y conversin de datos. o Definir la navegacin de pginas. o Soporte de internacionalizacin y accesibilidad. Dos libreras de etiquetas JSP personalizadas para expresar componentes en una pgina JSP y enlazar los componentes a objetos del servidor.

El modelo de programacin bien definido y las libreras de etiquetas facilita la construccin y mantenimiento de las aplicaciones web con Interfaces de Usuario (UI) de servidor. Con un mnimo esfuerzo se podra: Poner componentes en una pgina mediante etiquetas de componentes. Enlazar eventos generados por componentes con cdigo de la aplicacin en el servidor. Relacionar componentes UI en una pgina con datos del servidor. Construir una UI con componentes reutilizables y extensibles. Salvar y restaurar el estado de la UI ms all de la vida de las peticiones.

JSF es una especificacin desarrollada por la Java Community Process. Actualmente existen cuatro versiones de esta especificacin: JSF 1.0 (11/03/2004) JSF 1.1 (27/05/2004) JSF 1.2 (11/05/2006) JSF 2.0 (12/08/2009)

Para hacer un resumen, JSF proporciona: 1. 2. 3. 4. 5. Una clara separacin entre vista y modelo. Desarrollo basado en componente, no en peticiones. Las acciones del usuario se ligan muy fcilmente al cdigo en el servidor. Creacin de familias de componentes visuales para acelerar el desarrollo. Ofrece mltiples posibilidades de eleccin entre distintos desarrollos.

Ventajas e inconvenientes de JSF Existen numerosas ventajas que hacen que JSF sea una tecnologa apropiada para el desarrollo de aplicaciones web: Una de las grandes ventajas de la tecnologa JavaServer Faces es que ofrece una clara separacin entre el comportamiento y la presentacin. Las aplicaciones web construidas con tecnologa JSP conseguan parcialmente esta separacin. Sin embargo, una aplicacin JSP no puede mapear peticiones HTTP al manejo de eventos especficos del componente o manejar elementos UI como objetos con estado en el servidor. La tecnologa JavaServer Faces permite construir aplicaciones web que implementan una separacin entre el comportamiento y la presentacin tradicionalmente ofrecida por arquitectura UI del lado del cliente. JSF se hace fcil de usar al aislar al desarrollador del API de Servlet. La separacin de la lgica de la presentacin tambin le permite a cada miembro del equipo de desarrollo de una aplicacin web enfocarse en su parte del proceso de desarrollo, y proporciona un sencillo modelo de programacin para enlazar todas las piezas. Otro objetivo importante de la tecnologa JavaServer Faces es mejorar los conceptos familiares Disadventage de component-UI y capa-Web sin limitar a una tecnologa de script particular o un lenguaje de marcas. Aunque la tecnologa JavaServer Faces incluye una librera de etiquetas JSP personalizadas para representar componentes en una pgina JSP, los APIs de la tecnologa JSF se han creado directamente sobre el API JavaServlet. Esto permite hacer algunas cosas: usar otra tecnologa de presentacin junto a JSP, crear componentes propios personalizados directamente desde las clases de componentes, y generar salida para diferentes dispositivos

cliente. As, se podrn encapsular otras tecnologas como Ajax en componentes JSF, haciendo su uso ms fcil y productivo, al aislar al programador de ellas. JavaServer Faces ofrece una gran cantidad de componentes opensource para las funcionalidades que se necesiten. Los componentes Tomahawk de MyFaces y ADFFaces de Oracle son un ejemplo. Adems, tambin existe una gran cantidad de herramientas para el desarrollo IDE en JSF al ser el estndar de JAVA. La tecnologa JSF proporciona una rica arquitectura para manejar el estado de los componentes, procesar los datos, validar la entrada del usuario, y manejar eventos. Adems, ofrece una rpida adaptacin para nuevos desarrolladores.

No obstante, el uso de JavaServer Faces tambin tiene un conjunto de desventajas: Su naturaleza como estndar hace que la evolucin de JSF no sea tan rpida como pueda ser la de otros entornos como WebWork, Wicket, Spring, etc.

Requisitos e incompatibilidades En relacin con el uso de JSF, se han detectado los siguientes requisitos agrupados por categora: Versiones de Java o JDK 1.4.x o JDK 1.5.x Contenedores de Servlet o Tomcat 4.x o Tomcat 5.x o JRun 4(SPI a) o JBoss 3.2.x o JBoss 4.0.x o BEA Weblogic 8.1 o Jonas 3.3.6 w/Tomcat o Resin 2.1.x o Jetty 4.2.x o Jetty 5.1.x o Websphere 5.1.2 o OC4J

No obstante cualquier motor de servlet que cumpla la especificacin 2.3 debera valer. Respecto a JSP, con la versin 1.2 es bastante pero MyFaces usa caractersticas de la versin 2.0, por lo tanto en estos contenedores habr que instalar un jar adicional que viene con la distribucin, jsp-2.0.jar. IMPORTANTE. No aadir este jar si no es necesario, por ejemplo, en tomcat 5.5, la presencia de este archivo causara que el motor de servlet dejara de funcionar. Adems habra que tener en cuenta las siguientes consideraciones: El motor de servlet debe ser compatible con la especificacin 2.3 y las JSP deben ser acordes a la especificacin 1.2. JSF nicamente soporta peticiones realizadas con POST. La especificacin no obliga a que haya validaciones en el cliente, si bien los desarrollos como MyFaces y Shale proporcionan esta posibilidad.

Relacin con otros subsistemas JSF es una especificacin y como tal no tiene ninguna incompatibilidad con otros sistemas. Por ello, se pueden escoger los desarrollos que se desean para las necesidades de cada uno, el de jakarta, el de sun, el de oracle, o incluso el de IBM. Habra que estudiar cada uno de estos desarrollos para saber cules son las incompatibilidades que cada uno hace constar. Limitaciones que impone la especificacin Todo desarrollo de esta especificacin tiene que soportar JSP como tecnologa de vista. Pero JSF no obliga a que esta sea la opcin por defecto. De hecho hay otros proyectos de cdigo abierto que proporcionan la posibilidad de escribir la capa cliente sin usar JSP, como son Facelets y Clay. Concretamente, con Facelets podramos escribir toda esta capa en HTML. El hecho de que JSP sea una tecnologa obligatoria, hace que podamos seguir desarrollando con etiquetas JSP con las que estemos ms acostumbrados, como pueda ser JSTL. Puede coexistir con Struts en una misma aplicacin web. Esto lo hace especialmente importante para las aplicaciones ya escritas en Struts que quieran ir migrando poco a poco a JSF. Se puede cambiar unas pocas pginas y ver los cambios de manera paulatina. Haciendo, por lo tanto, muy suave la transicin.

9.4| JPA
Java Persistence API (JPA) proporciona un modelo de persistencia basado en POJOs para mapear bases de datos relacionales en Java. El Java Persistence API fue desarrollado por el grupo de expertos de EJB 3.0 como parte de JSR 220, aunque su uso no se limita a los componentes software EJB. Tambin puede utilizarse directamente en aplicaciones web y aplicaciones clientes; incluso fuera de la plataforma Java EE, por ejemplo, en aplicaciones Java SE. En su definicin, se han combinado ideas y conceptos de los principales frameworks de persistencia como Hibernate, Toplink y JDO, y de las versiones anteriores de EJB. Todos estos cuentan actualmente con una implementacin JPA. El mapeo objeto/relacional, es decir, la relacin entre entidades Java y tablas de la base de datos, se realiza mediante anotaciones en las propias clases de entidad, por lo que no se requieren ficheros descriptores XML. Tambin pueden definirse transacciones como anotaciones JPA. Java Persistence API consta de tres reas: El Java Persistence API El lenguaje de query El mapeo de los metadatos

Ventajas e inconvenientes Algunas de las ventajas del Open JPA consisten en que objetos transitorios pueden ser almacenados en forma permanente en una base de datos relacional. Adens, Open JPA pretende hacer ms eficaz el proceso de desarrollo, permitiendo a los desarrolladores

enfocarse a resolver los problemas de negocios a los que se enfrentan, en lugar de ocupar su tiempo con el cdigo de infraestructura. El Java Persistence API se basa en las mejores ideas de tecnologas como la persistencia Hibernate, TopLink, y JDO. Los clientes ya no tienen que enfrentarse a las incompatibilidades de modelos no estndar. Adems, la Java Persistence API se puede usar tanto en entornos Java SE, como en Java EE. No obstante, tiene la desventaja de que la implementacin del proveedor se encuentra oculta a la aplicacin lo cual la hace menos flexible.

Requisitos e incompatibilidades JPA ha sido definida como parte de la especificacin EJB 3.0 de Java EE5, que supone una simplificacin sobre versiones anteriores, por lo que ya no requiere de un contenedor EJB ni un servidor de aplicaciones Java EE. Esto implica que no podr utilizarse en versiones anteriores de Java.

Interaccin con otros subsistemas o componentes Muchos de los desarrolladores de Java que han utilizado objetos persistente que proporcionaban los marcos de cdigo abierto o DAOs en lugar de Entity Beans e Enterprise Beans fue porque eran considerados demasiado pesados y complicados de utilizar. Adems, estos ltimos slo podran utilizarse en servidores de aplicaciones Java EE. Muchas de las caractersticas de la persistencia de otros frameworks se incorporaron a la Java Persistence API, y proyectos como Hibernate y TopLink son ahora implementaciones de Java Persistence API (JPA) Hibernate La versin 3.2.0 Hibernate desarrolla la especificacin JPA, con lo que ahora es posible desarrollar una capa de acceso a datos compatibles con los estndares de Java en hibernate, y desplegarla en cualquier servidor de aplicaciones que soporte las especificaciones JEE5.

TopLink TopLink es una implementacin del EJB 3.0 JPA (Java Persistence API). Es una versin limitada del propietario del producto, por ejemplo, TopLink no proporciona sincronizacin de la cach entre la agrupacin de las aplicaciones, la poltica de validaciones y la cach de consultas. EJB JPA se defini como parte de la especificacin EJB 3.0 que es a su vez parte de la plataforma Java EE 5. No se utiliza un contenedor de EJBs, ni tampoco un servidor de aplicaciones Java EE con el fin de ejecutar aplicaciones que utilizan persistencia.

9.5| HIBERNATE
Como informacin previa para entender que es Hibernate, se explica el concepto de mapeador objeto-relacional (ORM). La programacin orientada a objetos y bases de datos relacionales son dos paradigmas diferentes. El modelo relacional trata con relaciones y conjuntos. Sin embargo, el paradigma orientado a objetos trata con objetos, sus atributos y asociaciones de unos a otros. Un ORM es un sistema que permite almacenar objetos de aplicaciones Java en tablas de sistemas de bases de datos relacionales usando metadatos que describen la relacin entre los objetos y la base de datos, y lo hace de una manera transparente y autnoma. Es una tecnologa que simplifica el acceso a base de datos, para ello permite establecer una correspondencia entre el modelo de la Base de Datos Relacional y una serie de clases que modelan los objetos de la aplicacin. Con esta tecnologa disponemos de un sistema de acceso a base de datos relacionales de manera transparente, no es necesario estudiar un nuevo lenguaje, nicamente se deben escribir sentencias java, y de manera independiente, el cdigo escrito con Hibernate funcionar en cualquier motor de datos al que se d soporte. Hibernate se distribuye como una herramienta de software libre, distribuida bajo los trminos de la licencia GNU LGPL. Hibernate parte de una filosofa de mapear objetos Java, tambin conocidos como POJOs (Plain Old Java Objects). Con Hibernate no es necesario escribir cdigo especfico en nuestros objetos ni hacer que hereden de clases determinadas. En vez de eso trabajamos con ficheros XML y objetos que proporciona la librera. Una de las principales caractersticas de Hibernate es su flexibilidad, envolvindolo todo bajo un marco de trabajo comn.

Ventajas e inconvenientes Hay un conjunto de factores que hacen de Hibernate una potente herramienta: Productividad. Usado conjuntamente con otras herramientas reducirn significativamente el tiempo de desarrollo. No obstante, donde verdaderamente Hibernate es potente, es en las herramientas que pone a disposicin. Es posible, mediante tareas de ant, partiendo de los objetos, y ficheros de configuracin, crear todo el modelo de datos, y lo que es mejor, con las sentencias adecuadas a cada motor. Incluso en la situacin contraria, an mejor, partiendo del modelo de datos, Hibernate es capaz de generar todos los ficheros de configuracin y los objetos asociados. Y si hacemos las cosas bien y diseamos nuestros objetos de negocio de la manera correcta y concienzuda, con Xdoclet, podemos generar los ficheros de configuracin, y de ah la base de datos. En caso de utilizar Java 5 no sera necesario ningn tipo de fichero de configuracin, bastara con anotaciones. Utilizar un framework de ORM simplifica enormemente la programacin de lgica de persistencia. Se trata de una idea completamente madura que cada vez se vuelve ms popular. En aplicaciones donde la lgica de negocios trabaja contra un modelo de dominio completamente orientado a objetos la generacin de cdigo se reduce entre un 30% y un 40%. Adems el cdigo generado suele ser mucho ms sencillo y mantenible.

Mantenibilidad. Al tener menos lneas de cdigo hace que el sistema sea ms comprensible y nos centramos en la lgica de negocio en lugar de en la conexin. Un sistema con menos cdigo es ms fcil de refactorizar. Rendimiento. La mayora de las optimizaciones son ms fciles disponiendo de un ORM, as algunos aspectos como queries son ms fciles de optimizar que con cdigo manejado va SQL/JDBC. Independencia del vendedor. El motor abstrae a la aplicacin de la Base de Datos subyacente y del dialecto SQL. Si la herramienta soporta un nmero distinto de base de datos, esto proporciona un cierto nivel de portabilidad. Hibernate es agnstico respecto al pool de conexiones, si no se especifica ninguno, usar uno interno, que para los casos de desarrollo es ms que suficiente. Por defecto, Hibernate usa el pool C3P0, pero el pool de jakarta Commons DBCP, funciona perfectamente. Y si es agnstico respecto a el pool, tambin lo es respecto a la base de datos, con una propiedad, cambiando una simple propiedad, tenemos nuestra aplicacin lista para funcionar en PostgreSQL, MySQL, HSQL, Derby, etc. Flexibilidad. Hibernate puede integrarse en una arquitectura J2EE. Su flexibilidad permite configurarlo no slo con JDBC, sino tambin con JNDI, JTA y JMX. Es tan flexible su configuracin que es vlida para su uso como aplicacin independiente o usada dentro de un servidor de aplicaciones. Si este fuera el caso, podramos usar el motor de transacciones del servidor, y si como aplicacin independiente usaramos el del controlador jdbc. Versatilidad en el acceso a BD relacionales. Hibernate, sobre cualquier otro sistema de acceso a base de datos relacionales, ofrece distintas formas de hacer la misma cosa. Por ejemplo, las consultas se pueden hacer de cuatro formas: HQL. Hibernate Query Language. Es un lenguaje de acceso a base de datos en donde las consultas se hacen a los objetos, no a las tablas. No es complicado de aprender y ofrece una gran potencia y simplifica los accesos. Aunque es un lenguaje propietario, slo vale para Hibernate, el prximo EJB-QL est, en gran parte, basado en l, por lo que merece la pena aprenderlo. QBE. Query by Example. Simplemente, crea un objeto, rellena un campo con datos, y se crea una sentencia SQL con ese criterio. QBC. Query by Criteria. Parecido al anterior, pero para criterios no slo de igualdad. Con cdigo se crean comparaciones, sentencias tipo like. Ideal para buscadores. La cantidad de tiempo y cdigo que ahorra es digna de mencin. SQL. En Hibernate es posible ejecutar sentencias SQL, por si alguna vez se tuviera la imperiosa necesidad de hacerlo. En este sentido, podramos trabajar con Hibernate como si fuera iBatis.

En el caso de decidirse por HQL o SQL, para acceder a los datos, no es necesario escribir las sentencias en el cdigo, podemos materializarlas en los ficheros de configuracin, darles un identificador y referirnos a ellas por esto nombre que le acabamos de otorgar. Tambin proporciona herramientas para ejecutar sentencias HQL, y ver su traduccin a SQL, por si alguien fuera escptico respecto a las bondades de Hibernate. Hibernate es menos invasivo que otros marcos de trabajo de mapeo O/R. Se utilizan la reflexin y la generacin de bytecodes en tiempo de ejecucin, y la generacin del SQL ocurre en el momento del arranque. Esto nos permite desarrollar objetos persistentes siguiendo el

lenguaje comn de Java: incluyendo asociacin, herencia, polimorfismo, composicin y las Colecciones de Java. Hibernate soporta la mayora de los sistemas de bases de datos SQL. El Hibernate Query Language, diseado como una extensin mnima, orientada a objetos, de SQL, proporciona un puente elegante entre los mundos objeto y relacional. Hibernate ofrece facilidades para recuperacin y actualizacin de datos, control de transacciones, repositorios de conexiones a bases de datos, consultas programticas y declarativas y un control de relaciones de entidades declarativas.

Alternativas iBatis. Es una tecnologa de software libre basado en capas desarrollado por Apache. Se compone de dos frameworks distintos: Framework Data Mapper: que realiza el mapeo de los objetos del dominio Java a las tablas relacionales de la Base de Datos. Ejecuta SQL y mapea los resultados de vuelta a objetos. Framework DAO: Permite dar a las aplicaciones una forma consistente y clara de acceso a los datos. Su objetivo es abstraer el cmo y dnde, del acceso al dato de la aplicacin, o sea, separar la capa de persistencia de la lgica de negocio.

Ventajas frente a Hibernate: No usa un lenguaje de consultas propio, solamente usa SQL. Permite construir queries totalmente personalizadas. Es fcil de usar y es un proyecto bien documentado. No tiene dependencias externas.

Inconvenientes frente a Hibernate: No es un motor ORM. No es vlido para proyectos con un alto volumen de tablas. No sigue estndares.

JDBC. Es un API (Application Programming interface) que describe o define una librera estndar para acceso a fuentes de datos, principalmente orientado a bases de datos relacionales que usan SQL (Struntured Query Language). No obstante, tiene la ventaja de su simplicidad. Ventajas frente a Hibernate: Solamente usa SQL. Simplicidad para proyectos pequeos.

Inconvenientes frente a Hibernate: El tratamiento de excepciones es farragoso an con pocas tablas. No existe separacin entre la capa de acceso a datos y la lgica de negocio. No es vlido para proyectos con un alto volumen de tablas.

EJB 3.0 (Enterprise Java Bean). Un Bean es un componente software que tiene la particularidad de ser reutilizable y as evitar la tediosa tarea de programar los distintos componentes uno a uno. Dentro de este conjunto, se encuentran los Enterprise Java Bean que son componentes del contexto de servidor que cubren la necesidad de intermediar entre la capa web y diversos sistemas empresariales. En este sentido, los EJB buscan la informacin en base de datos gestionando la integridad de los datos persistentes, es decir, la consistencia entre los datos de memoria y los de la base de datos. Los EJBs son fciles de utilizar, aunque la curva de aprendizaje puede llevar un coste bastante considerable.

Versiones Versiones homologadas Existen distintos mdulos para Hibernate y varias formas de combinarlos dependiendo de los requisitos tcnicos: Hibernate Core: Tambin conocido como Hibernate 3.2.x o Hibernate. Es el servicio base para la persistencia, con API nativa y mapeado de metadatos almacenados en archivos XML. Tiene un lenguaje de consultas llamado HQL (similar al SQL), adems de interfaces para consultas de todo tipo. Versin 3.2.5. Hibernate Annotatios: Hibernate, como otras herramientas de mapeado objetorelacional, requiere metadatos que dirigen la transformacin de datos de una representacin a otra (y viceversa). Como una opcin, ahora podemos usar el JDK 5.0 de anotaciones para el mapeado objeto-relacional con Hibernate 3.2. Versin 3.3.0. Hibernate EntityManager: Hibernate EntityManager implementa: o El API de gestin de la persistencia en Java estndar (JPA). o El lenguaje de consultas de la persistencia en Java estndar. o Las reglas de los ciclos de vida de los objetos de la persistencia en Java estndar. o El empaquetado y configuracin de la persistencia en Java estndar. Hibernate EntityManager envuelve el poderosos y madura Hibernate Core. Puedes volver a usar las APIs nativas de Hibernate, SQL nativo y el JDBC nativo si es necesario. Versin 3.3.1.

Requisitos e incompatibilidades Hibernate slo impone una condicin para poder usarse, las tablas deben tener una clave primaria, preferentemente una clave no natural, pero debe poder identificar los registros de alguna manera. Si bien Hibernate rene un conjunto de caractersticas que lo hacen ser muy llamativo, no es una solucin ptima en el caso de proyectos de migracin de datos, y si los criterios con que se crearon la base de datos no tienen un mnimo de calidad. Interaccin con otros subsistemas o componentes Existen diversas herramientas tiles para el uso de Hibernate que cubren todo el desarrollo desde nuestra aplicacin hasta nuestra base de datos y viceversa.

Desde herramientas de modelado UML como por ejemplo Poseidon podemos generar modelos entidad relacin que son traducidos por AndroMDA a POJOs y mediante XDoclet se generan los ficheros HBM. Todas estas tareas se automatizan mediante el uso de ANT. Otra opcin es crear la base de datos con una herramienta de modelado y a partir de la base de datos una vez creada, usar Middlegen para generar los ficheros HBM y a partir de estos los POJOs mediante hbm2java.

9.6| Maven
Maven es una herramienta software para la gestin y construccin de proyectos Java. Es similar en funcionalidad a Apache Ant, pero tiene un modelo de configuracin de construccin ms simple, basado en un formato XML. Maven utiliza un Project Object Model (POM) para describir el proyecto de software a construir, sus dependencias de otros mdulos y componentes externos, y el orden de construccin de los elementos. Viene con objetivos predefinidos para realizar ciertas tareas claramente definidas, como la compilacin del cdigo y su empaquetado. El motor incluido en su ncleo puede dinmicamente descargar plugins y libreras de un repositorio, el mismo repositorio que provee acceso a muchas versiones de diferentes proyectos Open Source en Java, de Apache y otras organizaciones y desarrolladores. Maven provee soporte no slo para obtener archivos de su repositorio, sino tambin para subir artefactos al repositorio al final de la construccin de la aplicacin, dejndola al acceso de todos los usuarios. Maven est construido usando una arquitectura basada en plugins que permite que utilice cualquier aplicacin controlable a travs de la entrada estndar. En teora, esto podra permitir a cualquiera escribir plugins para su interfaz con herramientas como compiladores, herramientas de pruebas unitarias, etc...
<?xml version="1.0" encoding="UTF-8"?><project> <modelVersion>4.0.0</modelVersion> <groupId>es.juntadeandalucia.cice.test</groupId> <artifactId>Dependencias</artifactId>

<packaging>war</packaging> <version>1.0.0</version> <description></description> <build> <finalName>Dependencias</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-el</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-api</artifactId> <version>1.1.5</version> </dependency> </dependencies> </project>

Ventajas de usar Maven en el Sistema productivo El uso de Maven en nuestro sistema productivo aporta un conjunto de ventajas, entre las que destacamos: Independencia de la plataforma Maven al tratarse de una herramienta externa, elimina las dependencias existentes de compilacin y empaquetado al sistema operativo, ahora la informacin necesaria viene definida en el archivo pom.xml. De esa forma, la construccin de un archivo .war no depende de la configuracin del eclipse del programador, ni de sus variables locales del sistema. Ahora la generacin del paquete viene definida en un archivo comn a todos los programadores. Esto permite la automatizacin del proceso de construccin. Gestin de las libreras Una de las principales funcionalidades de Maven es la gestin de libreras. Ya no es necesario que las libreras se encuentren en el proyecto, slo es necesario indicarle a Maven los datos de la librera para que se encargue de buscarla en todos los repositorios disponibles. Esto reduce drsticamente el volumen de las entregas en subversin, al no encontrarse las libreras incluidas en el proyecto.

Con Maven podemos definir nuestro propio repositorio de libreras donde podemos incluir libreras propias (componentes) o libreras con licencia que no son distribuidas libremente por internet. Maven adems resuelve las dependencias de libreras, una librera que depende de muchas otras Maven es capaz de resolverlo e incluir todas las dependencias. Definicin de arquetipos Maven permite crear arquetipos de proyectos base, pudiendo crear un esqueleto para un nuevo proyecto de forma rpida y sencilla. Aprovechando esta posibilidad, tenemos definidos un conjunto de arquetipos con todos las tecnologas que tienen salida en los ltimos proyectos. Con esto eliminamos el tiempo inicial de construccin de los proyectos y los posibles errores de configuracin que se pudieran producir, al ser esqueletos muy testeados. Entre los arquetipos disponibles se encuentran: jsf-seam-jpa jsf-hibernate-sping-jpa struts-hibernate-spring struts-ibatis-spring struts2-hibernate-spring contract-first-service contract-last-service emulador-warda etc

Permite el uso de perfiles de despliegue Una de las novedades de Maven es el uso de perfiles. Mediante los perfiles podemos definir el valor de los archivos de configuracin (.properties, .xml), valores de variables del sistema, etc. Por ejemplo, podemos definir un perfil Desarrollo PFC en nuestro entorno y otro perfil Pruebas Cliente en el entorno del cliente. De este modo cuando generamos un war en nuestro entorno, este se encontrar configurado, y cuando nuestro cliente genere un war en su entorno, tambin se encontrar configurado. Esto evita los errores de configuracin de los despliegues. Permite la integracin de mltiples plugins Al ser una herramienta de software libre, est abierto a nuevas aportaciones, como puede ser los plugins de javadoc, junit, etc Gracias a estos plugins podemos realizar tareas que antes resultaban pesadas tan solo haciendo referencia al plugin en el archivo pom.xml. Integracin con eclipse Existen plugins para integrar macen con el IDE de desarrollo Eclipse.

9.7| Subversion
Subversion es un sistema de control de versiones que administra el acceso a un conjunto de ficheros y mantiene un historial de cambios realizados. Es software libre y se le conoce tambin como SVN por ser ese el nombre de la herramienta de lnea de comandos. El sistema consiste en un repositorio de ficheros central y un programa cliente con el que cada usuario sincroniza su copia local, de tal forma que se comparte los cambios realizados sobre dicha copia. Subversin almacena cada versin del documento y cada accin realizada, quin la realiz y un comentario sobre la motivacin del cambio. De este modo podemos tener acceso a cada estado del proyecto en un momento concreto.

Qu es el trunk? Trunk es la raz del proyecto, donde se encuentra el producto final que va a ser llevado a produccin. Este siempre debe ser el directorio final. Este directorio ser usado por otras aplicaciones de gestin de proyecto. Qu son los tags (etiquetas)? Las etiquetas se utilizan para guardar el estado concreto de un producto en un punto clave se su evolucin. Como norma general se debe etiquetar por cada versin que se entregue. La normativa para las versiones es: La versin ser una notacin numrica compuesta por tres nmeros separados por puntos. major.minor.revision o major: indica la versin principal del software, consistiendo en un conjunto de funcionalidades concretas que son recogidas y cubiertas en dicha versin. o minor: indican funcionalidad menos cubierta en la versin de software entregada. o revision: se modifican cuando hay revisiones de cdigo ante fallos de la aplicacin. Por cada entrega hay que actualizar la versin.

Qu son los branches (ramas)? Una rama se crea para empezar un nuevo producto, para crear nuevas funcionalidades o tareas de mejoras, todo ello a partir de una versin que se encontraba marcada con un tag (normalmente un producto en produccin). La rama permite trabajar en paralelo en las dos lneas de trabajo, mientras se evoluciona la rama se pueden resolver incidencias sobre la rama principal. Una vez terminada la programacin de la rama, se puede mezclar el contenido de la rama principal con el contenido de la rama mediante la operacin merge, con esto tendramos en la rama principal las mejoras y el nuevo mdulo.

Se recomienda que una vez mezclada la rama con la raz, se suba la informacin de la rama en su repositorio.

Ventajas de usar Subversion en el sistema productivo Mltiples clientes Subversion dispone de varios clientes que permiten interactuar con l, entre las ms conocidas: Subclipse: cliente que permite la integracin de eclipse con subversin TortoiseSVN: cliente para Windows que nos permite trabajar con subversin como si fuerea un directorio en Windows.

Como detalle, la herramienta TortoiseSVN posee herramientas para comparar cambios sobre archivos binarios (Word, Excel,etc). Todo se almacena En Subversion todos los cambios se almacenan en el servidor, cada estado tiene un nmero de revisin propio con lo que es trivial volver a un punto exacto de la aplicacin. Cambios en bloque A diferencia de CVS, con subversion los cambios se realizan en bloque como transacciones nicas, de esta forma es ms fcil llevar un control de los cambios y realizar una vuelta atrs. Bloqueos selectivos de archivos Permite el bloque de archivos selectivamente, de este modo, se pueden bloquear archivos de difcil mezclado (normalmente archivos binarios) mientras se modifica, para evitar conflictos con otros integrantes del proyecto.

9.8| Freemarker
Freemarker est diseado para aportar practicidad en la generacin de pginas web HTML, o en la generacin de documentos de texto, particularmente en aplicaciones basadas en servlets siguiendo el patrn MVC (Modelo Vista Controlador). La idea atrs de utilizar patrones MVC para pginas web dinmicas es que separa los diseadores (autor HTML) de los programadores. Casa uno trabaja en lo que es bueno. Los diseadores pueden cambiar la apariencia de una pgina sin que los programadores necesiten recompilar el cdigo, porque la lgica de la aplicacin (programas Java) y el diseo de la pgina (templates de freemarker) estn separados. Esta separacin es til inclusive cuando el programador y el autor de la pgina son la misma persona, ya que ayuda a mantener la aplicacin clara y fcilmente mantenible. Aunque Freemarker tiene algunas capacidades de programacin, no es un verdadero lenguaje de programacin como PHP (por ejemplo).

Freemarker no es un framework de aplicaciones web. Es adecuada como un componente de un framework de aplicaciones web, pero el propio motor Freemarker no sabe nada acerca de HTTP o servlets. Simplemente genera texto.

FreeMarker no es un framework de aplicaciones Web. Es adecuada como un componente de un framework de aplicaciones Web, pero el propio motor FreeMarker no sabe nada acerca de HTTP o servlets. Simplemente genera texto.

9.9| Eclipse
Eclipse es un entorno de desarrollo integrado de cdigo abierto y multiplataforma, para desarrollar entornos de desarrollo integrados (IDE), como el IDE de Java llamado Java Development Toolit (JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son usados tambin para desarrollar el mismo Eclipse). Eclipse fue desarrollado originalmente por IBM como el sucesor de su familia de herramientas para VisualAge. Eclipse es ahora desarrollado por la Fundacin Eclipse, una organizacin independiente sin nimo de lucro que fomenta una comunidad de cdigo abierto y un conjunto de productos complementarios, capacidades y servicios. Eclipse como ya sabemos, es un software para desarrollar aplicaciones tanto de escritorio como web.

9.10| Photoshop
Adobe Photoshop es el nombre o marca comercial oficial que recibe uno de los programas ms populares de la casa Adobe, junto con sus programas hermanos Adobe Illustrator y Adobe Flash, y que se trata esencialmente de una aplicacin en forma de talle de pintra y fotografa que trabaja sobre un lienzo y que est destinado para la edicin, retoque fotogrfico y pintura a base de imgenes de mapa de bits (o grficos rasterizados). Su capacidad de retoque y modificacin de fotografas le ha dado el rubro de ser el programa de edicin de imgenes ms famoso del mundo.

También podría gustarte