# Expand

Expand es el nombre de una herramienta de productividad J2EE, esto es de un conjunto de mecanismos que facilitan el trabajo de crear sistemas de información utilizando tecnología y estándares Java. A pesar de que se presenta como un producto único, Expand incluye una selección de herramientas (todas ellas de código libre), ordenadas y agrupadas en una distribución, con todo lo necesario para el proceso de desarrollo de aplicaciones JEE5.
Expand se caracteriza por permitir un desarrollo muy rápido de componentes de negocio (ver tiempos de desarrollo), junto con una estructura de proyecto bien estructurada que asegura un trabajo ordenado, tanto en trabajo individual como en equipo.
Sigue el modelo de desarrollo de modelo unificado, pero reduciendo significativamente el overhead que acompaña habitualmente a este tipo de herramientas.
Presenta una estructura de dificultad progresiva, por lo que cada usuario puede utilizarlo en función de su nivel de conocimiento. Se organiza en 3 niveles:
* Usuario inexperto.
* Usuario con experiencia.
* Usuario experto.

## Arquitectura Expand

Expand está basado en un mecanismo de plantillas y wizards. Las plantillas están predefinidas o pueden ser creadas o modificadas por el usuario, en función de su nivel de conocimientos.
El código generado se basa en los frameworks incluidos en la Plataforma Tecnológica Estándar de Expand.
Componentes Expand tiene un conjunto de componentes que aportan la funcionalidad necesaria para hacer una aplicación JEE5: controllers, views, validators, enumerations, converters y múltiples componentes gráficos denominados genéricamente decorates.
Los componentes de mayor tamaño son: interative modules e hyperviews.

## Código libre

Aunque Expand no es una herramienta libre, produce código libre en todos sus componentes.

## Modelo de desarrollo Expand

Apoyado en la herramienta de productividad Expand se ha creado el Modelo de Desarrollo Expand, que encuadra esta herramienta, dentro de una plataforma tecnológica, una metodología (habitualmente Métrica 3 o similares) y un mecanismo de análisis de procesos basado en CMMI o AENOR 15504.
La orientación del modelo Expand es ofrecer un conjunto completo, que aporte las herramientas para abordar cualquier desarrollo JEE5 de forma ordenada.
Plataforma Tecnológica Estándar Por su estructura abierta Expand permite incorporar frameworks o componentes muy variados, incluso escritos por el usuario. Sin embargo Expand propone una Plataforma Tecnológica Estándar que se encuentra alineada con las últimas tendencias. Esta plataforma tecnológica en que se apoya Expand está constituida por:
* java server faces JSFs: arquitectura
* seam: funcionalidad básica (en versiones 1.8 y anteriores aon)
* spring: funcionalidad básica (en versión 1.9.2 solamente seam)
* richfaces: biblioteca de componentes JSF con soporte ajax (o alternativamente icefaces).
* hibernate: capa de persistencia.
* webtools: plugins de Eclipse que dan soporte al desarrollo de aplicaciones J2EE.
* birt: business intelligence y reports.
* subversion: control de versiones (o alternativamente CVS).
* maven: gestión de proyecto.
* mylyn: gestión de tareas, coordinación para equipos de desarrollo con soporte Bugzilla y JIRA (en versiones 1.8 y anteriores).
IDE de desarrollo
Expand es un plug-in de Eclipse (se recomienda versión Ganymede). Al abrir Eclipse, Expand se presenta como una nueva vista del proyecto, desde la que accede a toda la funcionalidad disponible: wizards, generadores, objetos de negocio, componentes, etc.
Mecanismo de análisis
Metodología

## Historia. Origen y versiones.

Expand es una evolución de CosmoWeb un producto anterior basado en JSPs con Structs. Las limitaciones de esta arquitectura y la complejidad del código generado, llevaron a adoptar Java Server Faces (jsf) desde el principio de la arquitectura Expand. En las primeras versiones la capa de persistencia se basaba en jdbc y se usaba un framework propietario llamado aon (más tarde sustituido por seam).
La Plataforma Tecnológica Estándar de Expand ha evolucionado desde la versión inicial 1.0 incluyendo nuevas funcionalidades, aunque ha mantenido su arquitectura inicial basada en Java Server Faces.
Se podría decir que desde una posición "fundamentalista" o totalmente inspirada en Gavin King, Expand se ha abierto a otras posibilidades, fundamentalmente con la incorporación de Spring como framework alternativo a Seam.
Expand 2.0 parece más orientarse a una herramienta de productividad general, abierta a soluciones diferentes, que solamente persigue la calidad y la productividad sin afirmaciones tecnológicas cerradas.
En octubre de 2008 se liberó la versión 2.2 que supone una serie de innovaciones importantes, entre ellas el hecho de que este producto pase a ser de "open source" bajo una licencia ExPL semejante a la MPL (Mozila Public License).

## Plataformas disponibles

Existen versiones para:
JVM
* 4
* 5
Application servers
* JBOSS
* WebSphere 5 y 6
* BEA
Links sobre tecnología:
* http://www.jboss.com/products/seam
* http://www.eclipse.org/ganymede/
* https://web.archive.org/web/20080801230755/http://www.javapolis.com/confluence/display/JP04/Gavin+King
* http://www.jboss.com/products/seam
* Links sobre producto:
* https://web.archive.org/web/20080704133350/http://www.transtools.com/products/en/expanden1.htm
* Datos: Q5847236