# Openframe

Openframe es un framework de desarrollo J2EE orientado a servicios (SOA), basado en componentes de software libre; estándares de facto en el desarrollo profesional que permiten realizar aplicaciones críticas de negocio disminuyendo los costes de diseño, desarrollo y mantenimiento de aplicaciones.

## Enfoque

* Aplicación de estándares comúnmente aceptados para formar una arquitectura abierta (Model View Controller, uso de patrones de diseño y patrones J2EE-Blue Prints)
* Integración de soluciones OpenSource que han sido probadas y certificadas por el equipo de desarrollo del framework (bajo coste de las soluciones con la fiabilidad y prestaciones de los paquetes comerciales)

## Componentes base

Los tres módulos principales de openFrame son Struts, Spring y Hibernate.

### Struts

Struts proporciona las siguientes facilidades:
* Un Controlador principal ya implementado (patrón Front Controller con Dispatcher View)
* Gestión automática de los formularios con refresco entre pantallas y su posible validación
* Gestión de los errores presentándolos en la vista
* Internacionalización del aplicativo (multiidioma)
* Biblioteca de tags para poder ser usados en las vistas
* Permite añadir filtros de proceso (patrón Decorating Filter)
* Un único fichero de configuración que liga los controladores con los formularios de la aplicación y deja clara su interacción y tiempo de vida

### Spring

Spring proporciona, entre otras, las siguientes facilidades:
* Un contenedor centralizado de objetos y servicios, totalmente configurable con ficheros XML
* A través del uso de la inversión de control, en particular la inyección de dependencias permite la configuración de objetos fuera del código de la aplicación (el contenedor se encarga de la instanciación) y de manera no intrusiva (los objetos configurados no están ligados a spring, ni han de conocer sus clases)
* Reduce el código de aplicación dedicado a configurar y localizar recursos (JNDI, JTA,..) al encargarse el framework. El código de la aplicación así se hace más legible al tener principalmente lógica de aplicación
* Facilita best practices como programar contra interfaces en lugar de contra clases
* Esto promueve el desacoplamiento de servicios (pensar en los objetos de la aplicación como servicios, que expresan su funcionalidad como interfaces y abstraen sus detalles de configuración de la vista del programador, facilita el cambio de una implementación concreta a otra)
* Estructurar en servicios la lógica de aplicación basándose sólo en POJO’s e interfaces facilita los test unitarios (no es necesario el contenedor de EJB para las pruebas y los servicios son fáciles de emular con MockObjects)
* Gestión de transacciones sin uso de API’s específicas mediante uso de Aspect Oriented Programming (AOP puede usarse también en otros servicios como gestión de logs, seguridad o excepciones)

### Hibernate

Hibernate como capa de acceso a datos proporciona las siguientes facilidades:
* Un mapeo objeto-relacional flexible (tabla por clase, múltiples objetos por registro, múltiples tablas por objeto, todo tipo de relaciones 1-n, n-m,…)
* Persistencia de objetos de manera transparente (no intrusivo, sin imponer interfaces o clases extrañas, sólo arrays y collections estándar java)
* Lenguaje de querys independiente de la BD (HQL)
* Posibilidad de acceso nativo tradicional (T-SQL, PL-SQL, …) y llamadas a lógica en la BD (stored procedures, packages)
* Toda la configuración (mapeos, querys HQL, querys nativas,…) puede definirse en ficheros de configuración XML, no hardcoded en el código java
* Caché (multi-layer, threadsafe, non-blocking, clusterable)
* Otras optimizaciones (lazy initialization, subselect fetching, …)
* Integración J2EE (EJB 3.0, JMX, JTA,…)
* Extensible (nuevos dialectos SQL, generadores de claves propios,…)
* Soporta múltiples DB (Oracle, DB2, Sybase, MS SQL Server, PostgreSQL, MySQL, HypersonicSQL, SAP DB, Interbase, Ingres, Informix)
openFrame utiliza como base estos tres módulos y lo extiende añadiendo un conjunto de servicios adicionales y patrones, seleccionados entre las mejores iniciativas opensource en cada área (log4j, tiles, hibernate, quartz, digester, tiles, validator, xerces, cocoon, jasper, openJMS,…) haciendo que funcionen de manera conjunta y ofreciendo una visión única y coherente del uso de la plataforma al desarrollador.

## Nueva release 2.0

Se encuentra disponible la nueva release 2.0 del framework J2EE openFrame. (ver noticia)