# Openframe

openFrame és un entorn de treball de desenvolupament J2EE, orientat a serveis (SOA), basat en components de software lliure, estàndard de facto en el desenvolupament professional, que permeten realitzar aplicacions crítiques de negoci, disminuint els costs de disseny, desenvolupament i manteniment d'aplicacions.

## Enfocament

Aplica d'estàndards comunament acceptats per a formar una arquitectura oberta (Model View Controller, ús de patrons de disseny i patrons J2EE-Blue Prints) i integra de solucions de codi obert que han estat provades i certificades per l'equip de desenvolupament del framework (cost reduït de les solucions amb la fiabilitat i prestacions dels paquets comercials).

## Components base

Els tres mòduls principals d'openFrame són Struts, Spring i Hibernate.

### Struts

Struts proporciona les següents facilitats:
* Un Controlador principal ja implementat (patró Front Controller amb Dispatcher View)
* Gestió automàtica dels formularis amb refresc entre pantalles i la seva possible validació
* Gestió dels errors presentant-los a la vista
* Internacionalització de l'aplicatiu (multiidioma)
* Llibreria de tags per a poder ser utilitzats a les vistes
* Permet afegir filtres de procés (patró Decorating Filter)
* Un únic fitxer de configuració que lliga els controladors amb els formularis de l'aplicació i deixa clara la seva interacció i temps de vida

### Spring

Spring proporciona, entre d'altres, les següents facilitats:
* Un contenidor centralitzat d'objectes i serveis, totalment configurable amb fitxers XML
* Mitjançant l'ús de la inversió de control, en particular la injecció de dependències permet la configuració d'objectes fora del codi de l'aplicació (el contenidor s'encarrega de la instanciació) i de manera no intrusiva (els objectes configurats no estan lligats a spring, ni han de conèixer les seves classes)
* Redueix el codi d'aplicació dedicat a configurar i localitzar recursos (JNDI, JTA,..) en encarregar-se el framework. El codi de l'aplicació així es fa més llegible en tenir principalment lògica d'aplicació
* Facilita best practices com ara programar contra interfícies en lloc de contra classes
* Això promou el desacoblament de serveis (pensar en els objectes de l'aplicació com serveis, que expressen la seva funcionalitat com interfícies i abstreuen els seus detalls de configuració de la vista del programador, facilita el canvi d'una implementació concreta a una altra)
* Estructurar en serveis la lògica d'aplicació basant-se només en POJO’s e interfícies facilita els tests unitaris (no és necessari el contenidor d'EJB per a les proves i els serveis són fàcils d'emular amb MockObjects)
* Gestió de transaccions sense ús d'API’s específiques mitjançant l'ús d'Aspect Oriented Programming (AOP pot utilitzar-se també a altres serveis como ara gestió de logs, seguretat o excepcions)

### Hibernate

Hibernate com a capa d'accés a dades proporciona les següents facilitats:
* Un mapeig objecte-relacional flexible (taula per classe, múltiples objectes per registre, múltiples taules per objecte, tota mena de relacions 1-n, n-m…)
* Persistència d'objectes de manera transparent (no intrusiu, sense imposar interfícies o classes estranyes, només arrays i collections estàndard java)
* Llenguatge de querys independent de la BD (HQL)
* Possibilitat d'accés natiu tradicional (T-SQL, PL-SQL, …) i crides a lògica a la BD (stored procedures, packages)
* Toda la configuració (mapejos, querys HQL, querys natives…) pot definir-se a fitxers de configuració XML, no hardcoded al codi java
* Catxé (multi-layer, threadsafe, non-blocking, clusterable)
* Altres optimitzacions (lazy initialization, subselect fetching, …)
* Integració J2EE (EJB 3.0, JMX, JTA…)
* Extensible (nous dialectes sql, generadors de claus propis…)
* Suporta múltiples DB (Oracle, DB2, Sybase, MS SQL Server, PostgreSQL, MySQL, HypersonicSQL, SAP DB, Interbase, Ingres, Informix)
openFrame utilitza com a base aquests tres mòduls i els estén, afegint un conjunt de serveis addicionals i patrons seleccionats entre les millors iniciatives opensource de cada àrea (log4j, tiles, hibernate, quartz, digester, tiles, validator, xerces, cocoon, jasper, openJMS…) i fent que funcionin de manera conjunta. Això ofereix al desenvolupador una visió única i coherent de l'ús de la plataforma.

## Nova release 2.0

Es troba disponible la nova release 2.0 del framework J2EE openFrame. (vegeu la notícia Arxivat 2009-01-23 a Wayback Machine.)

## Enllaços externs

* Web del Projecte openFrame Arxivat 2009-03-02 a Wayback Machine.
* SourceForge del Projecte openFrame
* openTrends Arxivat 2009-03-02 a Wayback Machine.