Framework de desarrollo J2EE (openFrame)
Página 1 de 2
El estándar J2EE incluye las especificaciones de Servlets y JSPs para facilitar la construcción y despliegue de aplicaciones Web. Aunque estas especificaciones proporcionan la infraestructura básica para crear aplicaciones web, no fijan el diseño de la aplicación.
La realización de la arquitectura de ejecución de aplicaciones va más allá que la realización de un compendio de servicios comunes de aplicación como objetos de acceso a datos, envío de correos o gestión de colas. Ha de proporcionar la arquitectura base de las aplicaciones, definir la estructura de capas y patrones de diseño utilizados en cada una de ellas.
Las “best practices” y patrones de diseño que han surgido de la comunidad Java, facilitan la creación de arquitecturas de aplicación de calidad sobre las que desarrollar las aplicaciones. No obstante, desarrollar de cero cada vez, a partir de los patrones, una arquitectura de aplicación es costoso, repetitivo y más propenso a errores que partir de una existente.
Es por esto que openTrends propone la implantación del framework openFrame, orientado a servicios (SOA), en sus clientes que tienen necesidades de desarrollos a medida, especialmente en entornos críticos, de gran volumen y multiproveedor.

El framework de desarrollo J2EE de openTrends es el resultado de:
- La experiencia de años en el desarrollo e implantación de aplicaciones corporativas en entornos ebusiness del personal de openTrends.
- La experiencia en el diseño de arquitecturas
- La 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)
El framework de desarrollo está diseñado teniendo en cuenta la necesidad constante de evolución y adaptación de una plataforma de este tipo. El equipo de desarrollo del openFrame conjuntamente con los clientes en donde está implantado está evolucionado esta tecnología para mejorar:
- La productividad de los desarrollos mediante plugins o herramientas específicas de soporte al desarrollo
- La calidad del software con la incorporación de metodologías de gestión de la calidad del código (Junit, Jmeter, Maven) e integración continua (Cruise Control)
- La gestió y reutilización de los proyectos y componentes (openForge, CVS)
openFrame proporciona una arquitectura orientada a servicios, basada 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.
Los tres módulos principales de openFrame son Struts, Spring y Hibernate.
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)
- Librería 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 proporciona, entre otras, las siguientes facilidades:
- Un contenedor centralizado de objectos y servicios, totalmente configurable con fitcheros XML
- A través del uso de la inversión de control, en particular la injecció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 como capa de acceso a datos proporciona las siguientes facilidades:
- Un mapeo objeto-relacional flexible (tabla por clase, multiples objetos por registro, multiples tablas por objeto, todo tipo de relaciónes 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
- Cache (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 multiples DB (Oracle, DB2, Sybase, MS SQL Server, PostgreSQL, MySQL, HypersonicSQL, SAP DB, Interbase, Ingres, Informix)
El framework de desarrollo de aplicaciones J2EE de openTrends 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.