9 tecnologías v1.1

23
9| Tecnologías Se propone el uso del framework SEAM como núcleo de la arquitectura. SEAM combina muchas de las tecnologías más 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 tecnologías, y va comino de establecerse como el estándar de facto para el desarrollo, superando en flexibilidad y potencia, a la conocida arquitectura Struts+Spring. Los principales componentes de una aplicación SEAM son los siguientes: Facelets Es un sistema de plantillas para JSF mediante el cual nos independizamos del estilo visual usado en las páginas, de forma que se permitirá en un futuro realizar cambios en el aspecto y los estilos de la aplicación de una forma fácil y elegante. Richfaces Mediante el uso de componentes visuales de JSF, se logrará crear la aplicación de forma simple, encapsulando la mayoría de la lógica en componentes visuales, que generen editores de texto, lista de valores dinámicas, o campos de texto con funciones de auto completar texto. Se propone la utilización de Richfaces que aparte de un gran número de componentes predefinidos y además ofrece funcionalidades AJAX a distintos niveles. JSF Es la especificación de SUN para construcción de aplicaciones web que siguen el patrón 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 biyección, más avanzado que Spring. Seam es un framework cuyo principio es configurar lo menos posible. Seam es uno de los frameworks más modernos existentes en la actualidad, con un proyección muy importante a corto plazo y unas características sorprendentes. JPA/Hibernate Java Persistence API es una especificación de SUN para la capa de persistencia, integrando las mejores características de Hibernate, TopLink, y JDO, proporcionando a las aplicaciones, un estándar potente, pero fácil de utilizar a la hora de acceder a los datos. Hibernate actualmente soporta JPA por lo que hace esta combinación, la más 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 ningún tipo de restricción MySql, PostgreSQL, Oracle, etc.

description

 

Transcript of 9 tecnologías v1.1

Page 1: 9 tecnologías v1.1

9| Tecnologías

Se propone el uso del framework SEAM como núcleo de la arquitectura. SEAM combina muchas de las tecnologías más 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 tecnologías, y va comino de establecerse como el estándar de facto para el desarrollo, superando en flexibilidad y potencia, a la conocida arquitectura Struts+Spring. Los principales componentes de una aplicación SEAM son los siguientes: Facelets Es un sistema de plantillas para JSF mediante el cual nos independizamos del estilo visual usado en las páginas, de forma que se permitirá en un futuro realizar cambios en el aspecto y los estilos de la aplicación de una forma fácil y elegante. Richfaces Mediante el uso de componentes visuales de JSF, se logrará crear la aplicación de forma simple, encapsulando la mayoría de la lógica en componentes visuales, que generen editores de texto, lista de valores dinámicas, o campos de texto con funciones de auto completar texto. Se propone la utilización de Richfaces que aparte de un gran número de componentes predefinidos y además ofrece funcionalidades AJAX a distintos niveles. JSF Es la especificación de SUN para construcción de aplicaciones web que siguen el patrón 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 biyección, más avanzado que Spring. Seam es un framework cuyo principio es configurar lo menos posible. Seam es uno de los frameworks más modernos existentes en la actualidad, con un proyección muy importante a corto plazo y unas características sorprendentes. JPA/Hibernate Java Persistence API es una especificación de SUN para la capa de persistencia, integrando las mejores características de Hibernate, TopLink, y JDO, proporcionando a las aplicaciones, un estándar potente, pero fácil de utilizar a la hora de acceder a los datos. Hibernate actualmente soporta JPA por lo que hace esta combinación, la más 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 ningún tipo de restricción MySql, PostgreSQL, Oracle, etc.

Page 2: 9 tecnologías v1.1

Maven Es un sistema de gestión de proyecto desarrollado por Apache para facilitar la organización, construcción y despliegue de las aplicaciones. Maven es un entorno extensible que proporciona mecanismos para realizar cualquiera de las operaciones típicas durante el ciclo de vida de las aplicaciones. Permite compilar, ejecutar los test, generar informes sobre la aplicación, 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 método 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 librería de clases para programadores Java. No es una aplicación para end-users en sí misma, sino algo que los programadores pueden embeber en sus productos. A continuación, se pasará a detallar un poco más todas estas tecnologías y otras más 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 tecnología JSF (JavaServer Faces), por lo cual se integran de manera muy fácil. Este framework incluye muchas características siendo las más importantes:

- Tiempo de desarrollo cero de los tags para UIComponents - Facilidad en la creación del templating para los components y páginas - Habilidad de separar los UIComponents en diferentes archivos - Un buen sistema de reporte de errores - Soporte completo a EL (Expresion Language) - Validación de EL en tiempo de construcción - No es necesaria configuración 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 página 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 vacío entre JSP y JSF, siendo una tecnología 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.

Page 3: 9 tecnologías v1.1

- Integrar JSP con JSF trae problemas, además, no se puede usar JSTL (JavaServer Pages Standar Tag Library) con JSF, cosa que Facelets sí provee.

- Facelets provee un proceso de compilación más rápido que JSP. - Provee templating, lo cual implica reutilización de código, simplificación de

desarrollo y facilidad en el mantenimiento de grandes aplicaciones. - Permite crear componentes ligeros sin necesidad de crear los tags de los

UIComponents (es más fácil comparado a crear un componente JSF puro). - Soporta Unified Expression Language, incluyendo soporte para funciones EL y

validación de EL en tiempo de compilación. Templating Existen tres maneras de modularizar las páginas y componentes: includes, archivos tag y decorators. Pero primero algo básico de templating: La página 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">

<!-- nótese 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>

Page 4: 9 tecnologías v1.1

Como puede verse donde uno quiere que se inserte código se usa el tag <ui:insert

name=”nombre”/> donde nombre corresponde al identificador de la sección. Tres maneras de modularizar con Facelets Esta es la porción de código que se abstraerá para los ejemplos siguientes: <ui:composition>

Bienvenido, #{usuario.nombre}

</ui:composition>

Templating mediante “includes” Este es el método más familiar para modularizar componentes (se le pueden pasar parámetros 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>

¿Cómo especificamos el tag? En un archivo xml, que es una librería de tags Facelets. Este archivo es cargado automáticamente por Facelets, para ello debe tener la extensión *.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>

Page 5: 9 tecnologías v1.1

Templating mediante ‘decorators’ Los decorators se pueden usar de la misma manera que los compositions, pero éstos pueden ser insertados en la página (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 práctico del decorator es cuando no tiene muchos sentido abstraer el componente en un archivo aparte, pero sí usar las ventajas del templating. Conclusión El uso de templating trae consigo las ventajas de tener un código ordenado (sobre todo en aplicaciones grandes), fácil 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 práctica mediante funcionalidad AJAX, sin embargo, esto podría hacer que se tomara demasiado tiempo en el desarrollo. Estas implementaciones proporcionan facilidad de desarrollo y reutilización; 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 más 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 divulgación entre la comunidad web. Richfaces es un framework de código abierto que añade capacidad Ajax dentro de aplicaciones JSF existentes sin recurrir a JavaScript. RichFaces incluye ciclo de vida, validaciones, conversores y la gestión de recursos estáticos y dinámicos. Los componentes de Richfaces están construidos con soporte Ajax y un alto grado de personalización del “look-and-feel” que puede ser fácilmente 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, itálica, subrayado. Alineación derecha, izquierda, justificada, agregar viñetas o numeración, enlace, imagen. Creación de tablas y modificación de número de columnas y renglones.

- Permite agregar capacidades de predicción de texto a un campo de entrada, se le puede indicar el mínimo de caracteres requeridos para mostrar la predicción del texto y la lista sugerida puede contener imágenes, no solo texto.

Page 6: 9 tecnologías v1.1

- 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 después de hacer submit puede ser guardado.

- Richfaces permite seleccionar el modo de la petición de datos de varios componentes visuales, por ejemplo pestañas y árbol de opciones, los modos son servidor, ajax y cliente.

- Una lista de registros puede ser paginada de manera muy sencilla, mostrando página a página 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 versión liberada de Richfaces es la 3.3.2, publicada en octubre del 2009. Esta versión incorpora un conjunto considerable de mejoras y nuevas funcionalidades como las etiquetas para layout (disposición de los elementos) de la página. Requisitos e incompatibilidades Richfaces fue desarrollado con una arquitectura de código abierto para ser compatible con la más amplia variedad de entornos. Para poder trabajar con Richfaces 3.3.2 es necesario que el servidor de aplicaciones soporte la especificación 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

Page 7: 9 tecnologías v1.1

- Firefox 2.0 – 3.5 - Opera - Nestcape - Safari

Interacción con otros componentes Richfaces se integra con diferentes componentes para poder realizar aplicaciones más potentes: Sun JSF RI Richfaces trabaja con cualquier implementación de JSF (1.14 y 1.2) y con la mayoría de las bibliotecas de componentes JSF sin ninguna configuración adicional Apache MyFaces Richfaces trabaja con todos Apache MyFaces versiones (1.1.1 – 1.1.6), incluidas las bibliotecas específicas como Tomahawk, Sandbox y Trinidad (el anterior ADF Faces). Sin embargo, hay algunas consideraciones a tener en cuenta para la configuración 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 configuración web.xml. Aún más, existen algunos problemas si se opta por utilizar MyFaces + Seam. Si se usa esta combinación, 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 integración con JBoss Seam. Esto mejora aún más la experiencia del usuario mediante la simplificación de la configuración y el “plumbing code”, así como la presentación de estado y la concurrencia para la gestión de Ajax.

9.3| JSF La tecnología JavaServer Faces es un framework de interfaz de componentes de usuarios del lado del servidor para las aplicaciones web basadas en la tecnología Java. Los principales componentes de la tecnología JSF son:

- Una API para: Representar componentes de Interfaz de Usuario (UI) y gestionar su estado.

o Manejar eventos, validar en el servidor y conversión de datos. o Definir la navegación de páginas. o Soporte de internacionalización y accesibilidad.

- Dos librerías de etiquetas JSP personalizadas para expresar componentes en una página JSP y enlazar los componentes a objetos del servidor.

Page 8: 9 tecnologías v1.1

El modelo de programación bien definido y las librerías de etiquetas facilita la construcción y mantenimiento de las aplicaciones web con Interfaces de Usuario (UI) de servidor. Con un mínimo esfuerzo se podría:

- Poner componentes en una página mediante etiquetas de componentes. - Enlazar eventos generados por componentes con código de la aplicación en el

servidor. - Relacionar componentes UI en una página con datos del servidor. - Construir una UI con componentes reutilizables y extensibles. - Salvar y restaurar el estado de la UI más allá de la vida de las peticiones.

JSF es una especificación desarrollada por la Java Community Process. Actualmente existen cuatro versiones de esta especificación:

- 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. Una clara separación entre vista y modelo. 2. Desarrollo basado en componente, no en peticiones. 3. Las acciones del usuario se ligan muy fácilmente al código en el servidor. 4. Creación de familias de componentes visuales para acelerar el desarrollo. 5. Ofrece múltiples posibilidades de elección entre distintos desarrollos.

Ventajas e inconvenientes de JSF Existen numerosas ventajas que hacen que JSF sea una tecnología apropiada para el desarrollo de aplicaciones web:

- Una de las grandes ventajas de la tecnología JavaServer Faces es que ofrece una clara separación entre el comportamiento y la presentación. Las aplicaciones web construidas con tecnología JSP conseguían parcialmente esta separación. Sin embargo, una aplicación JSP no puede mapear peticiones HTTP al manejo de eventos específicos del componente o manejar elementos UI como objetos con estado en el servidor.

- La tecnología JavaServer Faces permite construir aplicaciones web que implementan una separación entre el comportamiento y la presentación tradicionalmente ofrecida por arquitectura UI del lado del cliente. JSF se hace fácil de usar al aislar al desarrollador del API de Servlet.

- La separación de la lógica de la presentación también le permite a cada miembro del equipo de desarrollo de una aplicación web enfocarse en su parte del proceso de desarrollo, y proporciona un sencillo modelo de programación para enlazar todas las piezas.

- Otro objetivo importante de la tecnología JavaServer Faces es mejorar los conceptos familiares Disadventage de component-UI y capa-Web sin limitar a una tecnología de script particular o un lenguaje de marcas. Aunque la tecnología JavaServer Faces incluye una librería de etiquetas JSP personalizadas para representar componentes en una página JSP, los APIs de la tecnología JSF se han creado directamente sobre el API JavaServlet. Esto permite hacer algunas cosas: usar otra tecnología de presentación junto a JSP, crear componentes propios personalizados directamente desde las clases de componentes, y generar salida para diferentes dispositivos

Page 9: 9 tecnologías v1.1

cliente. Así, se podrán encapsular otras tecnologías como Ajax en componentes JSF, haciendo su uso más fácil 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. Además, también existe una gran cantidad de herramientas para el desarrollo IDE en JSF al ser el estándar de JAVA.

- La tecnología JSF proporciona una rica arquitectura para manejar el estado de los componentes, procesar los datos, validar la entrada del usuario, y manejar eventos.

- Además, ofrece una rápida adaptación para nuevos desarrolladores. No obstante, el uso de JavaServer Faces también tiene un conjunto de desventajas:

- Su naturaleza como estándar hace que la evolución de JSF no sea tan rápida como pueda ser la de otros entornos como WebWork, Wicket, Spring, etc.

Requisitos e incompatibilidades En relación con el uso de JSF, se han detectado los siguientes requisitos agrupados por categoría:

- 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 especificación 2.3 debería valer. Respecto a JSP, con la versión 1.2 es bastante pero MyFaces usa características de la versión 2.0, por lo tanto en estos contenedores habrá que instalar un jar adicional que viene con la distribución, jsp-2.0.jar. IMPORTANTE. No añadir este jar si no es necesario, por ejemplo, en tomcat 5.5, la presencia de este archivo causaría que el motor de servlet dejara de funcionar. Además habría que tener en cuenta las siguientes consideraciones:

- El motor de servlet debe ser compatible con la especificación 2.3 y las JSP deben ser acordes a la especificación 1.2.

- JSF únicamente soporta peticiones realizadas con POST. - La especificación no obliga a que haya validaciones en el cliente, si bien los

desarrollos como MyFaces y Shale proporcionan esta posibilidad.

Page 10: 9 tecnologías v1.1

Relación con otros subsistemas JSF es una especificación 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. Habría que estudiar cada uno de estos desarrollos para saber cuáles son las incompatibilidades que cada uno hace constar. Limitaciones que impone la especificación

- Todo desarrollo de esta especificación tiene que soportar JSP como tecnología de vista. Pero JSF no obliga a que esta sea la opción por defecto. De hecho hay otros proyectos de código abierto que proporcionan la posibilidad de escribir la capa cliente sin usar JSP, como son Facelets y Clay. Concretamente, con Facelets podríamos escribir toda esta capa en HTML.

- El hecho de que JSP sea una tecnología obligatoria, hace que podamos seguir desarrollando con etiquetas JSP con las que estemos más acostumbrados, como pueda ser JSTL.

- Puede coexistir con Struts en una misma aplicación 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 páginas y ver los cambios de manera paulatina. Haciendo, por lo tanto, muy suave la transición.

9.4| JPA Java Persistence API (JPA) proporciona un modelo de persistencia basado en POJO’s 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. También puede utilizarse directamente en aplicaciones web y aplicaciones clientes; incluso fuera de la plataforma Java EE, por ejemplo, en aplicaciones Java SE. En su definición, 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 implementación JPA. El mapeo objeto/relacional, es decir, la relación 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. También 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. Adenás, Open JPA pretende hacer más eficaz el proceso de desarrollo, permitiendo a los desarrolladores

Page 11: 9 tecnologías v1.1

enfocarse a resolver los problemas de negocios a los que se enfrentan, en lugar de ocupar su tiempo con el código de infraestructura. El Java Persistence API se basa en las mejores ideas de tecnologías como la persistencia Hibernate, TopLink, y JDO. Los clientes ya no tienen que enfrentarse a las incompatibilidades de modelos no estándar. Además, la Java Persistence API se puede usar tanto en entornos Java SE, como en Java EE. No obstante, tiene la desventaja de que la implementación del proveedor se encuentra oculta a la aplicación lo cual la hace menos flexible. Requisitos e incompatibilidades

JPA ha sido definida como parte de la especificación EJB 3.0 de Java EE5, que supone una simplificación 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. Interacción con otros subsistemas o componentes Muchos de los desarrolladores de Java que han utilizado objetos persistente que proporcionaban los marcos de código abierto o DAO’s en lugar de Entity Beans e Enterprise Beans fue porque eran considerados demasiado pesados y complicados de utilizar. Además, estos últimos sólo podrían utilizarse en servidores de aplicaciones Java EE. Muchas de las características 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 versión 3.2.0 Hibernate desarrolla la especificación JPA, con lo que ahora es posible desarrollar una capa de acceso a datos compatibles con los estándares de Java en hibernate, y desplegarla en cualquier servidor de aplicaciones que soporte las especificaciones JEE5. TopLink TopLink es una implementación del EJB 3.0 JPA (Java Persistence API). Es una versión limitada del propietario del producto, por ejemplo, TopLink no proporciona sincronización de la caché entre la agrupación de las aplicaciones, la política de validaciones y la caché de consultas. EJB JPA se definió como parte de la especificación EJB 3.0 que es a su vez parte de la plataforma Java EE 5. No se utiliza un contenedor de EJB’s, ni tampoco un servidor de aplicaciones Java EE con el fin de ejecutar aplicaciones que utilizan persistencia.

Page 12: 9 tecnologías v1.1

9.5| HIBERNATE Como información previa para entender que es Hibernate, se explica el concepto de mapeador objeto-relacional (ORM). La programación 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 relación entre los objetos y la base de datos, y lo hace de una manera transparente y autónoma. Es una tecnología 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 aplicación. Con esta tecnología 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 código 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 términos de la licencia GNU LGPL. Hibernate parte de una filosofía de mapear objetos Java, también conocidos como “POJOs” (Plain Old Java Objects). Con Hibernate no es necesario escribir código específico en nuestros objetos ni hacer que hereden de clases determinadas. En vez de eso trabajamos con ficheros XML y objetos que proporciona la librería. Una de las principales características de Hibernate es su flexibilidad, envolviéndolo todo bajo un marco de trabajo común. Ventajas e inconvenientes Hay un conjunto de factores que hacen de Hibernate una potente herramienta: Productividad. Usado conjuntamente con otras herramientas reducirán significativamente el tiempo de desarrollo. No obstante, donde verdaderamente Hibernate es potente, es en las herramientas que pone a disposición. Es posible, mediante tareas de ant, partiendo de los objetos, y ficheros de configuración, crear todo el modelo de datos, y lo que es mejor, con las sentencias adecuadas a cada motor. Incluso en la situación contraria, aún mejor, partiendo del modelo de datos, Hibernate es capaz de generar todos los ficheros de configuración y los objetos asociados. Y si hacemos las cosas bien y diseñamos nuestros objetos de negocio de la manera correcta y concienzuda, con Xdoclet, podemos generar los ficheros de configuración, y de ahí la base de datos. En caso de utilizar Java 5 no sería necesario ningún tipo de fichero de configuración, bastaría con anotaciones. Utilizar un framework de ORM simplifica enormemente la programación de lógica de persistencia. Se trata de una idea completamente madura que cada vez se vuelve más popular. En aplicaciones donde la lógica de negocios trabaja contra un modelo de dominio completamente orientado a objetos la generación de código se reduce entre un 30% y un 40%. Además el código generado suele ser mucho más sencillo y mantenible.

Page 13: 9 tecnologías v1.1

Mantenibilidad. Al tener menos líneas de código hace que el sistema sea más comprensible y nos centramos en la lógica de negocio en lugar de en la conexión. Un sistema con menos código es más fácil de refactorizar. Rendimiento. La mayoría de las optimizaciones son más fáciles disponiendo de un ORM, así algunos aspectos como queries son más fáciles de optimizar que con código manejado vía SQL/JDBC. Independencia del vendedor. El motor abstrae a la aplicación de la Base de Datos subyacente y del dialecto SQL. Si la herramienta soporta un número distinto de base de datos, esto proporciona un cierto nivel de portabilidad. Hibernate es agnóstico respecto al pool de conexiones, si no se especifica ninguno, usará uno interno, que para los casos de desarrollo es más que suficiente. Por defecto, Hibernate usa el pool C3P0, pero el pool de jakarta Commons DBCP, funciona perfectamente. Y si es agnóstico respecto a el pool, también lo es respecto a la base de datos, con una propiedad, cambiando una simple propiedad, tenemos nuestra aplicación lista para funcionar en PostgreSQL, MySQL, HSQL, Derby, etc. Flexibilidad. Hibernate puede integrarse en una arquitectura J2EE. Su flexibilidad permite configurarlo no sólo con JDBC, sino también con JNDI, JTA y JMX. Es tan flexible su configuración que es válida para su uso como aplicación independiente o usada dentro de un servidor de aplicaciones. Si este fuera el caso, podríamos usar el motor de transacciones del servidor, y si como aplicación independiente usaríamos 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, sólo vale para Hibernate, el próximo 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 sólo de igualdad. Con código se crean comparaciones, sentencias tipo like. Ideal para buscadores. La cantidad de tiempo y código que ahorra es digna de mención.

- SQL. En Hibernate es posible ejecutar sentencias SQL, por si alguna vez se tuviera la imperiosa necesidad de hacerlo. En este sentido, podríamos 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 código, podemos materializarlas en los ficheros de configuración, darles un identificador y referirnos a ellas por esto nombre que le acabamos de otorgar. También proporciona herramientas para ejecutar sentencias HQL, y ver su traducción a SQL, por si alguien fuera escéptico respecto a las bondades de Hibernate. Hibernate es menos invasivo que otros marcos de trabajo de mapeo O/R. Se utilizan la reflexión y la generación de bytecodes en tiempo de ejecución, y la generación del SQL ocurre en el momento del arranque. Esto nos permite desarrollar objetos persistentes siguiendo el

Page 14: 9 tecnologías v1.1

lenguaje común de Java: incluyendo asociación, herencia, polimorfismo, composición y las Colecciones de Java. Hibernate soporta la mayoría de los sistemas de bases de datos SQL. El Hibernate Query Language, diseñado como una extensión mínima, orientada a objetos, de SQL, proporciona un puente elegante entre los mundos objeto y relacional. Hibernate ofrece facilidades para recuperación y actualización de datos, control de transacciones, repositorios de conexiones a bases de datos, consultas programáticas y declarativas y un control de relaciones de entidades declarativas. Alternativas iBatis. Es una tecnología 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 cómo y dónde, del acceso al dato de la aplicación, o sea, separar la capa de persistencia de la lógica de negocio.

Ventajas frente a Hibernate:

- No usa un lenguaje de consultas propio, solamente usa SQL. Permite construir queries totalmente personalizadas.

- Es fácil de usar y es un proyecto bien documentado. - No tiene dependencias externas.

Inconvenientes frente a Hibernate:

- No es un motor ORM. - No es válido para proyectos con un alto volumen de tablas. - No sigue estándares.

JDBC. Es un API (Application Programming interface) que describe o define una librería estándar 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 pequeños.

Inconvenientes frente a Hibernate:

- El tratamiento de excepciones es farragoso aún con pocas tablas. - No existe separación entre la capa de acceso a datos y la lógica de negocio. - No es válido para proyectos con un alto volumen de tablas.

Page 15: 9 tecnologías v1.1

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 información 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 fáciles de utilizar, aunque la curva de aprendizaje puede llevar un coste bastante considerable. Versiones Versiones homologadas Existen distintos módulos para Hibernate y varias formas de combinarlos dependiendo de los requisitos técnicos:

- Hibernate Core: También 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), además de interfaces para consultas de todo tipo. Versión 3.2.5.

- Hibernate Annotatios: Hibernate, como otras herramientas de mapeado objeto-relacional, requiere metadatos que dirigen la transformación de datos de una representación a otra (y viceversa). Como una opción, ahora podemos usar el JDK 5.0 de anotaciones para el mapeado objeto-relacional con Hibernate 3.2. Versión 3.3.0.

- Hibernate EntityManager: Hibernate EntityManager implementa: o El API de gestión de la persistencia en Java estándar (JPA). o El lenguaje de consultas de la persistencia en Java estándar. o Las reglas de los ciclos de vida de los objetos de la persistencia en Java

estándar. o El empaquetado y configuración de la persistencia en Java estándar.

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. Versión 3.3.1.

Requisitos e incompatibilidades Hibernate sólo impone una condición 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 reúne un conjunto de características que lo hacen ser muy llamativo, no es una solución óptima en el caso de proyectos de migración de datos, y si los criterios con que se crearon la base de datos no tienen un mínimo de calidad. Interacción con otros subsistemas o componentes Existen diversas herramientas útiles para el uso de Hibernate que cubren todo el desarrollo desde nuestra aplicación hasta nuestra base de datos y viceversa.

Page 16: 9 tecnologías v1.1

Desde herramientas de modelado UML como por ejemplo Poseidon podemos generar modelos entidad relación que son traducidos por AndroMDA a POJO’s y mediante XDoclet se generan los ficheros HBM. Todas estas tareas se automatizan mediante el uso de ANT. Otra opción 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 POJO’s mediante hbm2java.

9.6| Maven Maven es una herramienta software para la gestión y construcción de proyectos Java. Es similar en funcionalidad a Apache Ant, pero tiene un modelo de configuración de construcción más 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 módulos y componentes externos, y el orden de construcción de los elementos. Viene con objetivos predefinidos para realizar ciertas tareas claramente definidas, como la compilación del código y su empaquetado. El motor incluido en su núcleo puede dinámicamente descargar plugins y librerías 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 sólo para obtener archivos de su repositorio, sino también para subir artefactos al repositorio al final de la construcción de la aplicación, dejándola al acceso de todos los usuarios. Maven está construido usando una arquitectura basada en plugins que permite que utilice cualquier aplicación controlable a través de la entrada estándar. En teoría, esto podría 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>

Page 17: 9 tecnologías v1.1

<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 compilación y empaquetado al sistema operativo, ahora la información necesaria viene definida en el archivo pom.xml. De esa forma, la construcción de un archivo .war no depende de la configuración del eclipse del programador, ni de sus variables locales del sistema. Ahora la generación del paquete viene definida en un archivo común a todos los programadores. Esto permite la automatización del proceso de construcción. Gestión de las librerías Una de las principales funcionalidades de Maven es la gestión de librerías. Ya no es necesario que las librerías se encuentren en el proyecto, sólo es necesario indicarle a Maven los datos de la librería para que se encargue de buscarla en todos los repositorios disponibles. Esto reduce drásticamente el volumen de las entregas en subversión, al no encontrarse las librerías incluidas en el proyecto.

Page 18: 9 tecnologías v1.1

Con Maven podemos definir nuestro propio repositorio de librerías donde podemos incluir librerías propias (componentes…) o librerías con licencia que no son distribuidas libremente por internet. Maven además resuelve las dependencias de librerías, una librería que depende de muchas otras Maven es capaz de resolverlo e incluir todas las dependencias. Definición de arquetipos Maven permite crear arquetipos de proyectos base, pudiendo crear un esqueleto para un nuevo proyecto de forma rápida y sencilla. Aprovechando esta posibilidad, tenemos definidos un conjunto de arquetipos con todos las tecnologías que tienen salida en los últimos proyectos. Con esto eliminamos el tiempo inicial de construcción de los proyectos y los posibles errores de configuración 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 configuración (.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, también se encontrará configurado. Esto evita los errores de configuración de los despliegues. Permite la integración de múltiples 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. Integración con eclipse Existen plugins para integrar macen con el IDE de desarrollo Eclipse.

Page 19: 9 tecnologías v1.1

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 también como SVN por ser ese el nombre de la herramienta de línea 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. Subversión almacena cada versión del documento y cada acción realizada, quién la realizó y un comentario sobre la motivación del cambio. De este modo podemos tener acceso a cada estado del proyecto en un momento concreto. ¿Qué es el trunk? Trunk es la raíz del proyecto, donde se encuentra el producto final que va a ser llevado a producción. Este siempre debe ser el directorio final. Este directorio será usado por otras aplicaciones de gestión 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 evolución. Como norma general se debe etiquetar por cada versión que se entregue. La normativa para las versiones es:

- La versión será una notación numérica compuesta por tres números separados por puntos. major.minor.revision

o major: indica la versión principal del software, consistiendo en un conjunto de funcionalidades concretas que son recogidas y cubiertas en dicha versión.

o minor: indican funcionalidad menos cubierta en la versión de software entregada.

o revision: se modifican cuando hay revisiones de código ante fallos de la aplicación. Por cada entrega hay que actualizar la versión.

¿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 versión que se encontraba marcada con un tag (normalmente un producto en producción). La rama permite trabajar en paralelo en las dos líneas de trabajo, mientras se evoluciona la rama se pueden resolver incidencias sobre la rama principal. Una vez terminada la programación de la rama, se puede mezclar el contenido de la rama principal con el contenido de la rama mediante la operación “merge”, con esto tendríamos en la rama principal las mejoras y el nuevo módulo.

Page 20: 9 tecnologías v1.1

Se recomienda que una vez mezclada la rama con la raíz, se suba la información de la rama en su repositorio. Ventajas de usar Subversion en el sistema productivo Múltiples clientes Subversion dispone de varios clientes que permiten interactuar con él, entre las más conocidas:

- Subclipse: cliente que permite la integración de eclipse con subversión - TortoiseSVN: cliente para Windows que nos permite trabajar con subversión 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 número de revisión propio con lo que es trivial volver a un punto exacto de la aplicación. Cambios en bloque A diferencia de CVS, con subversion los cambios se realizan en bloque como transacciones únicas, de esta forma es más fácil llevar un control de los cambios y realizar una vuelta atrás. Bloqueos selectivos de archivos Permite el bloque de archivos selectivamente, de este modo, se pueden bloquear archivos de difícil mezclado (normalmente archivos binarios) mientras se modifica, para evitar conflictos con otros integrantes del proyecto.

Page 21: 9 tecnologías v1.1

9.8| Freemarker Freemarker está diseñado para aportar practicidad en la generación de páginas web HTML, o en la generación de documentos de texto, particularmente en aplicaciones basadas en servlets siguiendo el patrón MVC (Modelo Vista Controlador). La idea atrás de utilizar patrones MVC para páginas web dinámicas es que separa los diseñadores (autor HTML) de los programadores. Casa uno trabaja en lo que es bueno. Los diseñadores pueden cambiar la apariencia de una página sin que los programadores necesiten recompilar el código, porque la lógica de la aplicación (programas Java) y el diseño de la página (templates de freemarker) están separados. Esta separación es útil inclusive cuando el programador y el autor de la página son la misma persona, ya que ayuda a mantener la aplicación clara y fácilmente mantenible. Aunque Freemarker tiene algunas capacidades de programación, no es un verdadero lenguaje de programación 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 código 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 también 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 Fundación Eclipse, una organización independiente sin ánimo de lucro que fomenta una comunidad de código 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.

Page 22: 9 tecnologías v1.1

9.10| Photoshop Adobe Photoshop es el nombre o marca comercial oficial que recibe uno de los programas más populares de la casa Adobe, junto con sus programas hermanos Adobe Illustrator y Adobe Flash, y que se trata esencialmente de una aplicación en forma de talle de pintra y fotografía que trabaja sobre un ‘lienzo’ y que está destinado para la edición, retoque fotográfico y pintura a base de imágenes de mapa de bits (o gráficos rasterizados). Su capacidad de retoque y modificación de fotografías le ha dado el rubro de ser el programa de edición de imágenes más famoso del mundo.

Page 23: 9 tecnologías v1.1