Académique Documents
Professionnel Documents
Culture Documents
OpenSource
1. Introducción
Satisfacer al cliente con entregas del producto cada poco tiempo, facilitando
ası́ la integración del producto y la calidad del mismo.
Un cambio de requisitos del cliente no debe suponer un problema en el
desarrollo.
Fijar la entrega de tareas en un plazo de tiempo determinado, dos semanas,
dos meses,etc.
Comunicación continua entre clientes y desarrolladores.
Las reuniones se deben realizar en persona para facilitar la comunicación,
esta es la mejor manera para extraer la información necesaria para realizar
un desarrollo de acuerdo con las expectativas del cliente.
La primera medida de progreso es el software ya realizado.
Los procesos ágiles promueven la supervivencia del desarrollo, debe existir
buen ambiente entre clientes, desarrolladores y sponsors.
La continua atención a calidad técnica y un buen diseño permiten la agilidad
en el desarrollo.
Simplicidad.
etc.
En definitiva, un proceso de desarrollo ágil implica que se debe integrar nues-
tra solución de forma continua satisfaciendo al cliente desde el primer momento,
consiguiendo productos ya totalmente funcionales desde el principio y lo más
importante, cambios en los requisitos del cliente no deberı́an afectar en exceso
al desarrollo que ya tenemos. El cliente necesita realimentación de lo que va exi-
giendo, por ello, contar con herramientas que favorezcan el desarrollo ágil parece
esencial.
Una vez situados en lo que podemos entender como desarrollo ágil vamos a
centrarnos en J2EE que es el entorno que vamos a fijar para la aplicación de estas
prácticas y por lo tanto las herramientas que presentemos serán de aplicación
para esta plataforma.
1.2. J2EE
J2EE es una plataforma creada por Sun en el año 1997, para el desarrollo
de aplicaciones distribuidas orientadas principalmente a la empresa. En el de-
sarrollo empresarial se ponen de manifiesto ciertos requisitos esenciales, no tan
crı́ticos en otras aplicaciones, que debe cumplir un desarrollo y que con J2EE po-
demos conseguir utilizando principalmente software libre, entre estos requisitos
se pueden nombrar los siguientes:
Escalabilidad, tanto horizontal como vertical
Fiabilidad
Facilidad de mantenimiento
Seguridad
Rendimiento
Extensibilidad
Flexibilidad
El objetivo final será conseguir la máxima productividad de los desarrolla-
dores, por ello el uso de herramientas que en esta plataforma nos permitan un
desarrollo ágil resultará relevante para el triunfo de nuestro producto.
El uso de J2EE nos ofrece múltiples ventajas:
Es una especificación que se puede utilizar en distinas plataformas.
Control por JCP, es un conjunto de grandes empresas que se encarga de la
correcta evolución de la plataforma, entre ellas podemos incluir: Sun, IBM,
Oracle, HP, etc.
Soluciones libres, ya que existen numerosos frameworks, y Apis Open Source
para el desarrollo en este entorno.
Asegurar la competencia, con productos de distintos precios y calidad.
No obstante, no son todo ventajas, también existen una serie de inconvenien-
tes:
Dependencia de un único lenguaje.
Complejidad que dificulta su adopción por los desarrolladores menos expe-
rimentados.
Muchos modelos de desarrollo, frameworks y Apis que pueden confudir a
nuestros desarrolladores.
Hay que distinguir entre los estándares de iure y de facto.
En concreto, podemos dividir la definición de J2EE en dos partes:
JSR: Java Specification Request, sirve para solicitar que una tecnologı́a sea
incluı́da en la especificación de J2EE, se presenta la propuesta y queda a
expensas de la aprobación, si se aprueba debe quedar totalmente definida y
el equipo encargado de su desarrollo además debe proporcionar un test de
compatibilidad y una implementación de referencia.
JCP: Java Community Process, Conjunto de empresas formando un organismo
que se encargan del control de J2EE, de esta manera se evita que pueda
ser criticada por pertenecer sólo a Sun. La forma de entrar es a través de
una cuota anual, no obstante presenta diferentes restricciones desde el punto
de vista del software libre (patentes, licencias propietarias y potestades su-
periores de Sun), a lo largo de distintas versiones fueron corregidas gracias
principalmente al impulso de Apache.
En conclusión, desde el punto de vista teórico J2EE es una especificación de
especificaciones para distintos conceptos: XML, Servicios Web, Ejb,etc. También
contamos con un conjunto de buenas prácticas o guı́as que se denominan J2EE
Blueprints.
Una vez que ya hemos establecido teóricamente la definición de J2EE, em-
pezaremos definiendo el modelo de capas que propone, con la posibilidad de
variación según la complejidad y las necesidades que tengamos, de todas formas
generalizando podemos realizar la siguiente separación de capas:
Cliente: Aquı́ se sitúan los distintos clientes de nuestra aplicación, normalmente
un interfaz de usuario.
Presentación: Contiene la lógica de interacción entre usuario y aplicación.
Controla la interacción entre usuario y lógica de negocio utilizando distintas
vistas.
Lógica de Negocio: Código que realiza las funcionalidades que ofrece nuestra
aplicación, aquı́ es dónde se pone de manifiesto la necesidad de fácil mante-
nimiento y extensibilidad.
Integración: Comunicación con otros subsistemas, como motores de bases de
datos, de reglas, etc. Es importante la necesidad de que en esta capa se
puedan añadir nuevas fuentes con cierta facilidad. Deberemos garantizar
acceso transparente a las fuentes de información, con el uso de por ejemplo
el patrón de diseño DAO (Data Access Object).
Sistemas de información: Son las fuentes de información: bases de datos, fi-
cheros, etc.
En los siguientes apartados veremos las necesidades, problemas y posibilida-
des de estas capas, para finalizar examinando las herramientas que nos permiten
el desarrollo de estas capas de manera sencilla y rápida, con el objetivo de obte-
ner la máxima productividad.
1.3. Herramientas OpenSource
Aplicaciones de escritorio
Navegadores web
Aplicaciones para dispositivos móviles
Servicios Web
Ficheros
Sistemas Sap
2.6. Transversal
A lo largo de todas las capas surgen una serie de necesidades que se mantienen
constantes, entre ellas podemos nombrar las siguientes:
3.1. Xdoclet
La decisión del uso de Xdoclet, siempre quedará en las manos del Jefe del
proyecto que será el encargado de decidir si merece la pena utilizar un tiempo
en la implantación de Xdoclet (como ir en moto) o bien seguir utilizando con-
figuraciones y generación de código manual (como ir en bicicleta), este tipo de
decisiones puede llevar al triunfo de una aplicación o no.
También es importante contemplar que la generación de código es una he-
rramienta potente, pero previamente a su uso resulta útil conocer como se harı́a
a mano, es decir generar el fichero de configuración de un conjunto de actions
Struts resulta muy pesado pero es conveniente conocer como se realiza para a
partir de ahı́ ya poder automatizar el proceso.
En nuestro caso de estudio de aplicaciones multicapa J2EE la generación de
código Xdoclet la podemos realizar en las siguientes partes:
3.2. Axis
Axis es un motor de SOAP para aplicaciones Java realizado por Apache, que
nos da el soporte necesario para el desarrollo de servicios web en la plataforma
J2EE tanto desde el punto de vista del cliente como del servidor.
Además, en sus últimas versiones Axis incluye una serie de caracterı́sticas
que hacen más atractivo su uso:
Mini servidor stand alone.
Servlet de administración de los servicios web desplegados.
Soporte para WSDL.
Generador de clases Java a partir de ficheros WSDL.
Ejemplos.
Monitor TCP/IP.
Integración mediante tareas Ant.
Las ventajas de uso de Axis para la generación de servicios se manifiestan en
los siguientes puntos:
Utilización de parsers Sax para el procesamiento de XML, incrementando
por tanto la velocidad.
Flexibilidad, el desarrollador puede “pinchar” el funcionamiento del servicio
web en distintas partes.
Estabilidad, compatibilidad hacia atrás con versiones anteriores.
Framework orientado a la reutilización, permite el uso de componentes ya
creados, como pueden ser Ejb’s para ofrecer funcionalidad tipo servicio web.
Framework para el transporte sobre TCP/IP y con distintos protocolos como
SMTP, FTP, orientado a mensajes, etc.
Invocación dinámica de servicios web.
Todas estas caracterı́sticas convierten a Axis en el referente para para el
desarrollo de servicios web en J2EE, no obstante, normalmente los servidores de
aplicaciones suelen disponer de sus propias herramientas para el desarrollo de
servicios web, pero en algunos casos pueden tener problemas de integración con
clientes que no sean puramente Java.
Existen también una serie de inconvenientes en el uso de Axis, que se refieren
principalemente al mapeo de objetos, es necesario que realicemos el mapeo ma-
nualmente de los objetos (no simples) que formen parte del servicio, en los arrays
se debe indicar manualmente como se realiza la serialización y deserialización, el
transporte de algunos tipos como Document no es trivial y no se puede hacer de
manera directa, las Collection de Java tampoco se pueden enviar, esto se debe
a que es un tipo abstracto, de todas formas el uso de Axis está justificado por
sus ventajas.
Axis, se configura a través de una serie de ficheros XML que con la ayuda de
Xdoclet podemos realizar sin mayor problema.
La importancia de Axis queda de manifiesto en el momento actual de la arqui-
tectura software (a nı́vel industrial), en la cual se apuesta por una arquitectura
orientada a servicios (SOA-no sólo son servicios web, servicios multimedia,etc.),
por ello contar en nuestro desarrollo de una herramienta que permita exportar
la funcionalidad de nuestra aplicación a través de servicios web sin tener por ello
un extra de esfuerzo, resulta una decisión estratégica importante que fomenta la
interoperabilidad base de SOA.
3.3. Ant
Simplicidad
Entendible para los nuevos usuarios
Extensible
Project: Define una serie de objetivos de alto nivel, uno sólo por script.
Property: De esta forma definimos distintas variables que podemos utilizar en
todo el fichero de construcción.
Target: Tareas a ejecutar para conseguir un objetivo, como puede ser la gene-
ración de documentación, varias por script.
Task: Cada paso de ejecución.
Tareas incorporadas
Ant Echo AntCall Exec
AntStructure ExecOn Apply Fail
Available Filter Chmod FixCRLF
Copy GenKey Cvs Get
Delete Gunzip Gzip Property
Jar Replace Java Rmic
Javac SignJar Javadoc Sql
Mail Style Mkdir Tar
Move Taskdef Patch Touch
Tstamp Unjar Untar Unwar
Unzip Uptodate War Zip
Tareas opcionales
Antlr JunitReport Cab Native2Ascii
Depend PropertyFile FTP RenameExtension
JavaCC Script Javah Sound
JJTree StyleBook Jlink Telnet
Junit Test
Cuadro 1. Tareas Ant.
A continuación se presenta una tabla con algunas de las tareas que nos per-
mite ejecutar Ant:
Es conveniente utilizar Ant por razones como las siguientes:
Sintaxis XML.
Estilo declarativo.
Rapidez de ejecución.
Conjunción de varias tareas.
Posibilidad de múltiples tareas y comandos.
Creación de nuestras propias tareas.
Script de despliegue de las aplicaciones desarrolladas.
Gestión del classpath.
Multiplataforma, basada en Java.
Rapidez.
Compilación, empaquetamiento y despliegue de aplicaciones y componentes
Ejb.
3.4. Log4j
Appenders: Son las distintas salidas a las que podemos enviar los mensajes
generados, podemos encontrar una serie de ellos ya definidos para la consola,
ficheros de texto, formato HTML, o bien direccionarlos a un servidor de log.
En cualquier caso, podemos configurar la salida, a través de layouts, con la
información que deseamos como: hora, mensaje, quién lo lanza, etc.
Layouts: Son los encargados de formatear los mensajes. Tenemos layouts para
Html o XML.
Loggers: Se encargan de generar los mensajes, a través de la configuración
definimos como se tratarán los mensajes de una clase o paquete, es decir su
layout y appender, con solicitar para una determinada un logger (instancia
de Logger) ya podremos utilizar la biblioteca de registro.
3.5. Junit
Facilidad de uso.
Creación de conjuntos de pruebas para una clase.
Combinación con otras herramientas como Ant.
Código libre.
Bien documentado.
Pruebas a diferentes niveles y capas.
Extensible.
Además su combinación con Ant hace que el desarrollo de proyectos J2EE
se haga más liviano, rápido y eficiente, asegurando además un cierto nivel de
calidad.
Existen extensiones de Junit que nos permiten realizar pruebas en las distin-
tas capas de nuestra aplicación, siempre y cuando hayamos seguido un diseño
apropiado, de esta manera existen frameworks basados en Junit para probar:
XmlUnit, para documentos XML.
DbUnit, para probar el estado de la base de datos.
Mockrunner.
MockEjb.
EasyMock, para generar las clases que basadas en nuestras interfaces de
negocio nos permitan probar los servicios y funcionalidad de la aplicación.
Cactus, para pruebas unitarias del lado del servidor.
HttpUnit, para peticiones a la aplicación como cliente.
StrutsTestCase, para actions de Struts (mappings, form bean,etc).
JunitPerf, para objetos decorator.
JWebUnit, para probar la navegación de la aplicación.
4. Conclusiones
Tras esta presentación teórica de algunas caracterı́sticas y herramientas uti-
lizadas en J2EE podemos decir que:
J2EE conlleva un desarrollo complejo.
Existen múltiples herramientas y tecnologı́as, tenemos que saber elegir aque-
llas que necesitemos, potenciando la productividad de nuestros desarrolla-
dores.
Necesidad de pruebas de las diferentes partes de la aplicación, para poder
asegurar cierta calidad.
Exportar nuestra funcionalidad con diferentes vistas.
Los beneficios que obtenemos unidos al desarrollo ágil, también son múltiples:
Potenziación del software libre.
Cualidades de J2EE: escalibilidad, flexibilidad,etc.
Interoperabilidad.
Centramos esfuerzo en el desarrollo y no en generar documentación para
productos obsoletos.
Seguridad.
Calidad del producto final.
Robustez.
Referencias
1. C. Bauer and G. King. Hibernate In Action. Manning, 2005.
2. S. Bayern. Jstl In Action. Manning, 2003.
3. J. C. Deepak Alur and D. Malks. Core J2EE Patterns. Prentice Hall, 2003.
4. N. Ford. Art of Java Web Development: Struts, Tapestry, Junit, Axis,... Manning,
2004.
5. D. M. Geary. Core J2EE Patterns. Prentice Hall, 2004.
6. E. Hatcher and S. Loughran. Java Development with Ant. Manning, 2003.
7. T. Husted et al. Struts In Action. Manning, 2003.
8. V. Massol and T. Husted. Junit In Action. Manning, 2004.
9. B. G. Sullins and M. B. Whipple. Ejb Cookbook. Manning, 2003.
10. C. Walls and N. Richards. Xdoclet In Action. Manning, 2004.