SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
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.
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.
-

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>
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>
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 “lookand-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.
-

-

-

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
-

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.
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.
2.
3.
4.
5.

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

-

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.
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
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.
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.
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
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.
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 objetorelacional, 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.
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>
<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.
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.
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.
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.
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.
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.
9 tecnologías v1.1

Más contenido relacionado

La actualidad más candente

Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Frameworkecontinua
 
[ES] Desarrollo de aplicaciones con Java Server Faces
[ES] Desarrollo de aplicaciones con Java Server  Faces[ES] Desarrollo de aplicaciones con Java Server  Faces
[ES] Desarrollo de aplicaciones con Java Server FacesEudris Cabrera
 
Desarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EEDesarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EEFernando Montaño
 
Introducción a Java EE
Introducción a Java EEIntroducción a Java EE
Introducción a Java EEPaco Saucedo
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-20065. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006Samuel Marrero
 
Presentacion sobre asp
Presentacion sobre aspPresentacion sobre asp
Presentacion sobre aspkarenReyes152
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETJavier Roig
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETJavier Roig
 
Asp .net
Asp .netAsp .net
Asp .netmellcv
 
Diapositivas Web Util
Diapositivas Web UtilDiapositivas Web Util
Diapositivas Web Utilsudamericano
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NETwilliamsm
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 
Semana 1 Automatización de infraestructura y despliegue Sprint Boot
Semana 1   Automatización de infraestructura y despliegue Sprint BootSemana 1   Automatización de infraestructura y despliegue Sprint Boot
Semana 1 Automatización de infraestructura y despliegue Sprint BootRichard Eliseo Mendoza Gafaro
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación JavaAntonio Contreras
 
Desarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidorDesarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidorJomicast
 

La actualidad más candente (20)

Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
 
[ES] Desarrollo de aplicaciones con Java Server Faces
[ES] Desarrollo de aplicaciones con Java Server  Faces[ES] Desarrollo de aplicaciones con Java Server  Faces
[ES] Desarrollo de aplicaciones con Java Server Faces
 
Desarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EEDesarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EE
 
Introducción a Java EE
Introducción a Java EEIntroducción a Java EE
Introducción a Java EE
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-20065. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
 
Presentacion sobre asp
Presentacion sobre aspPresentacion sobre asp
Presentacion sobre asp
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
Spring
SpringSpring
Spring
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NET
 
Asp .net
Asp .netAsp .net
Asp .net
 
Manualcake
ManualcakeManualcake
Manualcake
 
nn
nnnn
nn
 
Diapositivas Web Util
Diapositivas Web UtilDiapositivas Web Util
Diapositivas Web Util
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NET
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Semana 1 Automatización de infraestructura y despliegue Sprint Boot
Semana 1   Automatización de infraestructura y despliegue Sprint BootSemana 1   Automatización de infraestructura y despliegue Sprint Boot
Semana 1 Automatización de infraestructura y despliegue Sprint Boot
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Desarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidorDesarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidor
 

Similar a 9 tecnologías v1.1

Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver FulgueraJavier Oliver Fulguera
 
01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptxjohann
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Robert Rayco Quiroz
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
DISEÑO DE APLICACIONES WEB (INTRODUCCION)
DISEÑO DE APLICACIONES WEB (INTRODUCCION)DISEÑO DE APLICACIONES WEB (INTRODUCCION)
DISEÑO DE APLICACIONES WEB (INTRODUCCION)René Pilataxi
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacionkaolong
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightParadigma Digital
 
Tutorial javafx-primeros-pasos
Tutorial javafx-primeros-pasosTutorial javafx-primeros-pasos
Tutorial javafx-primeros-pasosNorman Enmanuel
 
Java ventajas y caracteristicas
Java ventajas y caracteristicasJava ventajas y caracteristicas
Java ventajas y caracteristicasbat1820
 
Estudio comparativo de PHP, ASP.NET Y JAVA
Estudio comparativo de PHP, ASP.NET Y JAVAEstudio comparativo de PHP, ASP.NET Y JAVA
Estudio comparativo de PHP, ASP.NET Y JAVAHelmilpa
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicasGerardo Linares
 
Programacion Basica
Programacion Basica Programacion Basica
Programacion Basica Yoconditap
 
Presentación de programacion
Presentación  de programacionPresentación  de programacion
Presentación de programacionlajokito
 
Documentacion struts2 laura.palma
Documentacion struts2 laura.palmaDocumentacion struts2 laura.palma
Documentacion struts2 laura.palmaLaura Palma
 

Similar a 9 tecnologías v1.1 (20)

Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
 
01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptx
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
DISEÑO DE APLICACIONES WEB (INTRODUCCION)
DISEÑO DE APLICACIONES WEB (INTRODUCCION)DISEÑO DE APLICACIONES WEB (INTRODUCCION)
DISEÑO DE APLICACIONES WEB (INTRODUCCION)
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
Sercicios web
Sercicios webSercicios web
Sercicios web
 
framework.pptx
framework.pptxframework.pptx
framework.pptx
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Documento Web2Py
Documento Web2PyDocumento Web2Py
Documento Web2Py
 
Tutorial javafx-primeros-pasos
Tutorial javafx-primeros-pasosTutorial javafx-primeros-pasos
Tutorial javafx-primeros-pasos
 
Java ventajas y caracteristicas
Java ventajas y caracteristicasJava ventajas y caracteristicas
Java ventajas y caracteristicas
 
MEAN Stack
MEAN StackMEAN Stack
MEAN Stack
 
Estudio comparativo de PHP, ASP.NET Y JAVA
Estudio comparativo de PHP, ASP.NET Y JAVAEstudio comparativo de PHP, ASP.NET Y JAVA
Estudio comparativo de PHP, ASP.NET Y JAVA
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicas
 
Trabajo gru
Trabajo gruTrabajo gru
Trabajo gru
 
Programacion Basica
Programacion Basica Programacion Basica
Programacion Basica
 
Presentación de programacion
Presentación  de programacionPresentación  de programacion
Presentación de programacion
 
Documentacion struts2 laura.palma
Documentacion struts2 laura.palmaDocumentacion struts2 laura.palma
Documentacion struts2 laura.palma
 

9 tecnologías v1.1

  • 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.
  • 2. 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.
  • 3. - 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>
  • 4. 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>
  • 5. 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 “lookand-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.
  • 6. - - - 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
  • 7. - 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.
  • 8. 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. 2. 3. 4. 5. Una clara separación entre vista y modelo. Desarrollo basado en componente, no en peticiones. Las acciones del usuario se ligan muy fácilmente al código en el servidor. Creación de familias de componentes visuales para acelerar el desarrollo. 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
  • 9. - - 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.
  • 10. 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
  • 11. 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.
  • 12. 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.
  • 13. 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
  • 14. 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.
  • 15. 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 objetorelacional, 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.
  • 16. 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>
  • 17. <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.
  • 18. 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.
  • 19. 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.
  • 20. 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.
  • 21. 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.
  • 22. 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.