Arquitectura Java J2EE
Arquitectura Java J2EE
Introducción.................................................................................................................. 3
Aplicaciones WEB........................................................................................................ 3
Evolución.................................................................................................................. 3
Modelo 1............................................................................................................... 3
Modelo 1.5............................................................................................................ 3
Modelo 2............................................................................................................... 4
Modelo 2X............................................................................................................ 4
Definición de la arquitectura software ........................................................................... 5
Aspectos generales.................................................................................................... 5
Descomposición funcional del sistema ...................................................................... 9
Descomposición en microaplicaciones .................................................................. 9
Separación Lógica en capas..................................................................................... 11
Capa de presentación........................................................................................... 11
Capa de negocio .................................................................................................. 16
Capa de acceso a datos ........................................................................................ 17
Capa de infraestructura........................................................................................ 19
Comunicación entre capas. Desacoplamiento. ......................................................... 21
Bibliografía................................................................................................................. 24
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
Introducción
El objeto de este documento es definir una arquitectura flexible y consistente,
basándose en la utilización de patrones de diseño, para la construcción de aplicaciones
web empleando tecnología java. Partiendo del popular modelo de aplicación de 3
capas, se pretende alcanzar un modelo más refinado que evolucione el actual,
describiendo ciertas recomendaciones y pautas de diseño, y haciendo hincapié en los
puntos más débiles que habitualmente aparecen en este tipo de proyectos, como la
gestión de la sesión de usuario, escalabilidad, portabilidad a sistemas similares, etc. No
se pretende abarcar todas las soluciones existentes para cada posible escenario en un
proyecto de estas características, sino agrupar las opciones de diseño más
recomendables para una aplicación web de corte común, en base a los problemas que
habitualmente aparecen durante la elaboración de este tipo de productos.
Aplicaciones WEB
Lo que el mercado demanda actualmente son mayormente aplicaciones web, que
permitan a las empresas tradicionales llegar al cliente de a pié sin necesidad de que éste
se desplace hasta la ubicación física de la misma. Partiendo de este tipo de productos,
además de la tecnología empleada para dar solución al problema, se han ido creando y
perfeccionando distintas arquitecturas más o menos independientes de la tecnología
aplicada. Dentro de esta familia de aplicaciones o herramientas, hay que destacar el
papel que el lenguaje JAVA, junto con sus extensiones J2EE y el apoyo del mundo
open-source están jugando.
Evolución
La evolución tecnológica que el sector ha sufrido durante los últimos años ha
permitido otra evolución paralela, la de la arquitectura de las aplicaciones web. A
medida que aparecían nuevos recursos técnicos, los patrones de diseño se amoldaban
para aprovechar las nuevas característica que estás novedades ofrecían. De esta forma,
el modelo arquitectónico de las aplicaciones de Internet ha sufrido dos grandes saltos
desde la aparición de los primeros portales. Los distintos modelos de aplicación sobre
los que ha ido desarrollando se clasifica en:
Modelo 1
Son las más primitivas. Se identifican con este modelo las clásicas aplicaciones
web CGI, basadas en la ejecución de procesos externos al servidor web, cuya salida por
pantalla era el html que el navegador recibía en respuesta a su petición. Presentación,
negocio y acceso a datos se confundían en un mismo script perl.
Modelo 1.5
Aplicado a la tecnología java, se da con la aparición de las jsps y los servlets. En
este modelo, las responsabilidades de presentación (navegabilidad, visualización, etc)
-3 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
recaen en las páginas jsps, mientras que los beans incrustados en las mismas son los
responsables del modelo de negocio y acceso a datos.
Modelo 2
Como evolución del modelo 1.5 con la incorporación del patrón MVC a este tipo
de aplicaciones, se define lo que se conoce como Model 2 de la arquitectura web. En el
diagrama siguiente se aprecia la incorporación de un elemento controlador de la
navegación de la aplicación. El modelo de negocio queda encapsulado en los javabeans
que se incrustan en las jsps, aunque como se verá a lo largo del resto del documento,
esta responsabilidad se explota cuando se alcanza el modelo de diseño n-
capas[FOW02].
Modelo 2X
El modelo 2X aparece como evolución del modelo 2, y con objeto de dar
respuesta a la necesidad, cada vez más habitual, de desarrollar aplicaciones multicanal,
es decir, aplicaciones web pueden ser atacadas desde distintos tipos de clientes remotos.
Así, una aplicación web multicanal podrá ejecutarse desde una PDA, desde un terminal
de telefonía móvil, o desde cualquier navegador html estándar. El medio para lograr
publicar la misma aplicación para distintos dispositivos es emplear plantillas XSL para
transformar los datos XML y determinar la plantilla a emplear en base al parámetro
user-agent recibido en la request. La aplicación de esta solución al modelo 2 de
aplicaciones web define lo que se conoce como modelo 2X [STXX][MERC02].
-4 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
1
Se define la sesión del usuario como la secuencia de eventos que ha provocado desde que el usuario
comienza su ejecución de la aplicación.
-5 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
2
Al mantener la información de sesión en base de datos, es accesible desde cualquiera de las instancias de
la aplicación. No obstante, es necesario controlar la caducidad de la misma para evitar un crecimiento
desmesurado del repositorio.
-6 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-7 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
Tomando como base este modelo, distintos patrones arquitectónicos han ido
apareciendo como evolución del mismo (Modelo Brown [FOWL02], los
patrones de Sun, etc.), casi todos insertando más capas que habitualmente están
orientadas a conseguir una mayor independencia entre las tres anteriormente
descritas.
• Portabilidad
En la medida de lo posible, una aplicación web debe poder adaptarse a
las distintas posibles arquitecturas físicas susceptibles de ser empleadas para el
despliegue del paquete, limitándose en la medida de lo posible el impacto de tal
adaptación a tareas de configuración, y evitándose así la necesidad de modificar
el código de la misma ante dichas situaciones. Un ejemplo que se da
habitualmente, es el encontrar un cliente reacio al empleo de tecnologías J2EE
por los consabidos costes de rendimiento (o simplemente económicos) que
acarrean. Dado que el modelo de separación física de capas mediante Enterprise
javabeans de tipo sesión implementando el patrón de diseño Façade
[GOF94][JURI00] es algo habitual y recomendado desde muchos ámbitos
académicos, surge la necesidad de modificar el código del producto para
eliminar las capas intermedias, puesto que no se cuenta con un contenedor el
EJBs para la implantación.
• Componentización de servicios de infraestructura
En todas las aplicaciones, incluidas las aplicaciones web, aparecen una
serie de servicios que podríamos denominar de infraestructura, y que han de
estar disponibles desde distintas partes del sistema. Así, esta necesidad rompe
aparentemente la separación vertical de capas, dando lugar a una capa de
infraestructura que sirve funcionalmente a todas las demás. Casos habituales de
servicios de esta naturaleza son:
- Servicio de log
- Pool de conexiones JDBC (o de cualquier otro sistema de persistencia)
- Sistema de configuración
- Gestor de accesos/permisos de usuario.
- Etc.
La arquitectura propuesta pretende tratar este conjunto de servicios como
componentes, servicios de la capa de infraestructura, de forma que:
-8 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-9 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
que en caso contrario, no serían tales, sino aplicaciones completas), puesto que procesos
asociados a una microaplicación requerirán de otros procesos o datos localizados en
microaplicaciones distintas. Un error de diseño frecuente en este tipo de contextos es
permitir que una microaplicación recupere información directamente del repositorio de
datos mantenido por otra. Esto genera productos fuertemente acoplados, y dificulta
mucho las labores de mantenimiento, dado que un cambio leve en el modelo de datos de
un servicio cualquiera puede conllevar efectos laterales importantes. Se pierde el control
sobre la gestión de las entidades de la base de datos, además de dificultar la depuración
de errores.
Colaboración entre microaplicaciones
Cuando surge la necesidad de colaborar con ciertos procesos desde una
microaplicación a otra, la primera cuestión a resolver es a que nivel de la arquitectura
se debe hacer esto, manteniendo siempre el principio de separación de responsabilidades
y de máxima independencia entre los distintos módulos de la aplicación. Como se ha
dicho antes, se ha de evitar el acceso directo al repositorio de información. Si por el
contrario, se accediera a nivel de la capa de acceso a datos, a través de sus façades, se
evitaría el problema antes descrito. Sin embargo, limita la posible evolución de la
microaplicación fuente de datos, puesto que se esta forzando a que mantenga la misma
interfaz en su capa de acceso a datos en un futuro. El punto adecuado para comunicar
dos microaplicaciones es pues la capa de negocio, dado que además es en esta capa
donde se comprueba la potestad del usuario para invocar a los procesos en ella
implementados. Así, será necesario que la microaplicación que requiere del servicio se
autentifique en la segunda, para evitar que terceros sistemas invoquen procesos de
negocio inadecuadamente. Esto puede obligar a elevar servicios de persistencia al nivel
de la capa de negocio, incluso cuando no sea necesario implementar reglas de negocio,
pero así se mantiene centralizado el control de acceso en una misma capa.
Para mantener la independencia entre microaplicaciones, debe sustituirse el
modelo habitual de colaboración entre módulos, es decir, la invocación directa de sus
clases, por otro que permita un mayor desacoplamiento de los mismos. A este punto se
presentan distintas alternativas, de donde se destacan estas dos:
1. Empleo de EJBs de sesión.
La invocación de los servicios de negocio de una microaplicación desde
otra mediante un EJB tiene la gran ventaja de que, al ser habitual el empleo de
estos componentes a modo de façade, es posible que no tenga impacto alguno en
la microaplicación fuente de datos. Además, puede llegar a ser imprescindible si
la operación a realizar se viera implicada en una transacción, dado que el EJB es
capas de gestionar transacciones distribuidas. Por otro lado, la invocación es
costosa (RMI o IIOP), y sobre todo inviable si las microaplicaciones cuentan
con un firewall entre ellas. Esto limita la distribución y/o sustitución del
producto.
2. Servicios WEB
Los servicios web cuentan con la ventaja de permitir invocaciones
remotas en formato XML y sobre el protocolo (entro otros) http. Esto posibilita
la distribución o colaboración de las microaplicaciones presentes en distintas
redes, o a través de Internet, dado que no son interceptados por un fierwall. Se
-10 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
debe publicar un servicio web por cada servicio de negocio que se desee
compartir con otras microaplicaciones de la misma aplicación o, porqué no, de
otras aplicaciones o sistemas distintos. Esta opción es más aconsejable que la
anterior, aunque inviable en el caso de las transacciones distribuidas.
El empleo de esta alternativa de diseño permite amplias posibilidades de
distribución de un mismo producto, pero además facilita enormemente algo muy
demandado hoy en día en el mercado como la integración con otros sistemas de la
misma compañía. Con esta arquitectura, es relativamente sencillo adaptar, por ejemplo,
la gestión de permisos sobre servicios de la aplicación, a un nuevo entorno con un
gestor propio, o centralizar el control de acceso para todas las compañías de un grupo
empresarial, cada una con su propia instancia del producto, en un mismo punto de la
red. El desarrollo de servicios web es sencillo y está disponible para prácticamente
todos los entornos de desarrollo.
Capa de presentación
Como se dijo anteriormente, es la responsable de todos los aspectos relacionados
con la interfaz de usuario de la aplicación. Así, en esta capa de resuelven cuestiones
como:
• Navegabilidad del sistema, mapa de navegación, etc
• Formateo de los datos de salida: Resolución del formato más adecuado para la
presentación de resultados. Está relacionado directamente con la
internacionalización de la aplicación
• Internacionalización: Los textos, etiquetas, y datos en general a presentar se
obtendrán de uno u otro fichero de recursos en base al idioma preferido del
navegador del usuario. En base a esta condición se ven afectadas las
representaciones numéricas, las validaciones sobre los datos de entrada (coma
decimal o punto decimal) y otros aspectos relativos al idioma del usuario
remoto.
• Validación de los datos de entrada, en cuanto a formatos, longitudes máximas,
etc.
• Interfaz gráfica con el usuario.
• Multicanalidad de la aplicación: Una misma aplicación web puede contar con
varias presentaciones distintas, determinándose el uso de la adecuada en base al
-11 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-12 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-13 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
3
El empleo de cookies para mantener el estado de la sesión de usuario puede presentar problemas en
tanto en cuanto ciertos navegadores web (clientes) no las aceptan, además de resultar tediosas a la hora de
serializar según que estructuras de datos y limitadas en capacidad.
4
Referido a la distribución vertical de la aplicación, cuando las capas se separan físicamente, hay que
tener en cuenta que por cada petición que se lance de una capa a otra, se está ejecutando una invocación
RMI o IIOP, con el consecuente coste que ello conlleva.
-14 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
principal de la aplicación, susceptible esta de ser cargada varias veces durante la sesión
del usuario, son candidatos a ser cacheados en la sesión del usuario (siempre y cuando
estemos hablando de un tamaño moderado de estructuras). Si los elementos contenidos
en el combo-box no fueran dependientes del usuario, sino comunes a todos ellos (por
ejemplo, la lista de países, idiomas, etc.), el lugar adecuado para almacenarlos sería en
el objeto Application, común a todas las sesiones del servidor de aplicaciones. Es
importante implementar ciertos mecanismos de control sobre este tipo de técnicas, dado
que un uso abusivo de los objetos session o application puede generar serios problemas
de rendimiento cuando el número de usuarios concurrentes alcanza ciertas cotas. Así
mismo, es necesario un control sobre la caducidad de los datos almacenados, tanto en
sesión como en la aplicación, puesto que por ejemplo, en el caso de la segunda, los
datos no se refrescarían hasta que se reiniciase la aplicación, algo que en un sistema de
producción puede no ocurrir en varios meses o años.
El empleo de esta técnica implica, lógicamente, que el uso del objeto session
quede centralizado a través de la caché. Es conveniente que la caché ejerza el control
sobre los tipos de los objetos que se almacenan a través suyo. Así, por ejemplo, si el
diseñador, jefe de proyecto o cualquier otro responsable configura la caché para que el
objeto que se almacene en sesión bajo la etiqueta user sea del tipo UserBean (es decir,
un bean que represente la entidad usuario), la caché deberá evitar, controlando el tipo de
los objetos que se le pasen, que se trate de colocar un objeto de tipo String bajo esa
misma etiqueta, aunque contenga en esencia la misma información (el login de usuario).
En proyectos donde distintos equipos desarrollan distintas partes del sistema de forma
paralela, el forzar este modo de trabajo evitará errores de coordinación entre los
distintos desarrolladores implicados.
Aunque lo que mas comúnmente se almacena en memoria (sesión o aplicación)
son objetos de la naturaleza del perfil del usuario o similares, hay ciertos casos en los
que, sobre todo debido al alto coste que implica la obtención de los resultados, o a la
alta frecuencia de invocación, lo que conviene retener en memoria son los parámetros
de devolución de ciertos métodos. Así, pongámonos en el caso de que un informe de
cierre de caja conlleve la ejecución de una sentencia SQL pesada, de varios minutos de
cálculo en el motor de base de datos, y que dicho informe sea susceptible de ser
consultado por todos los gerentes de la empresa durante los primeros días del mes.
Interesaría en este caso almacenar el resultado del informe (que no cambiará hasta el
mes que siguiente), con una caducidad preventiva de una semana, para tampoco
almacenar durante tres semanas datos que no van a ser consultados por nadie, y con un
tamaño máximo de objetos de este tipo en caché de uno, de forma que tan pronto se
invocara el cierre del mes siguiente (sólo cambia el parámetro), este dato se retirara de
la caché. Otro caso parecido sería la lista de provincias de un país. Si el publico objetivo
de una aplicación web es en un 95% español, nos interesa cachear el resultado de la
consulta que retorna las provincias españolas o, por ejemplo, el resultado de la consulta
para los tres países más seleccionados en el ámbito de la aplicación. En conclusión, la
caché deberá almacenar los datos a tres niveles: objeto, método y parámetros.
Parametrización de la caché
Con objeto de que la caché se pueda manejar como un componente, y ser
reutilizado en otros proyectos sin necesidad de modificar su código, deberá permitir ser
parametrizada mediante ficheros XML externos. Entre los parámetros a establecer, por
cada uno de los objetos o métodos a cachear tendrá:
-15 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
Capa de negocio
En esta capa es donde se deben implementar todas aquellas reglas obtenidas a
partir del análisis funcional del proyecto. Así mismo, debe ser completamente
independiente de cualquiera de los aspectos relacionados con la presentación de la
misma. De esta forma, la misma capa de negocio debe poder ser empleada para una
aplicación web común, una aplicación WAP, o una standalone. Por otro lado, la capa de
negocio ha de ser también completamente independiente de los mecanismos de
persistencia empleados en la capa de acceso a datos. Cuando la capa de negocio
requiera recuperar o persistir entidades o cualquier conjunto de información, lo hará
siempre apoyándose en los servicios que ofrezca la capa de acceso a datos para ello. De
esta forma, la sustitución del motor de persistencia no afecta lo más mínimo a esta parte
del sistema. Debería poder reemplazarse el gestor de bases de datos por un conjunto de
ficheros de texto sin necesitar tomar ni una línea de código de presentación o negocio.
Las responsabilidades que conviene abordar en esta capa son:
• Implementación de los procesos de negocio identificados en el análisis
del proyecto.
Como se deduce del párrafo anterior, los procesos de negocio
implementados en esta capa son totalmente independientes de cualquier
aspecto relativo a la presentación de los mismos. Pongamos por ejemplo
la generación de un informe que conste de varias filas las cuales deberán
sombrearse con un color determinado por la superación o no de ciertos
umbrales para ciertos valores. La aplicación de ciertos umbrales, y la
consecuente determinación de la situación (correcta, incorrecta, etc) de
cada valor de la fila es un cálculo de negocio que debe afrontarse en esta
capa. Sin embargo, sería en un error completar un campo adicional en el
que, como resultado del cálculo, se determinara directamente el color de
la fila. Lo adecuado es codificar la situación de la misma y, una vez en
presentación, determinar el color adecuado en base al código recibido.
De esta forma, si el usuario requiere que a partir de cierta fecha, el color
rojo sea sustituido por el naranja, la modificación de este aspecto de
presentación de información se limitaría en la aplicación a una
modificación de la capa de presentación.
• Control de acceso a los servicios de negocio.
-16 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
Dado que una misma aplicación puede contar con más de una
capa de presentación al mismo tiempo, es aconsejable que la responsable
última de ejecutar tareas sobre el control de acceso a los servicios del
sistema no sea la capa de presentación, sino la de negocio. Los
implementadores de la capa de negocio ni pueden ni deben confiar en
que las futuras implementaciones de nuevas capas de presentación
gestionen adecuadamente el acceso a los servicios de negocio. De esta
forma, en cada invocación a cualquier método restringido de negocio se
deberá comprobar por medio del sistema de autentificación adecuado, los
derechos del usuario actual a realizar tal operación.
• Publicación de servicios de negocio
Tal y como se explicó en el apartado relativo a la descomposición
funcional del sistema al hablar de las microaplicaciones, el lugar
adecuado para que dos microaplicaciones o aplicaciones completas
interactúen es a nivel de la capa de negocio. Así mismo, el modelo de
colaboración recomendado en esta definición de arquitectura es el que se
basa en el empleo de servicios web. De esta forma, la capa de negocio
ofrecerá dos vistas alternativas, dado que por un lado el conjunto de
façades con presentación ofrecerá a esta los servicios que se requieran
para el funcionamiento de la microaplicación en sí, y por otro, otro
conjunto de servicios serán publicados por medio (recomendablemente)
de servicios web. Estos últimos estarán orientados a la colaboración con
otros sistemas distintos u otras microaplicaciones pertenecientes al
mismo proyecto, y deberán por tanto llevar un control más férreo sobre
el acceso al servicio, dado que ahora, además de hacerlo a nivel de
usuario, puede que sea necesario hacerlo a nivel de aplicación, por lo que
cada aplicación remota debería estar explícitamente autorizada a invocar
el servicio de negocio publicado.
• Invocación a la capa de persistencia
Los procesos de negocio son los que determinan que, como y
cuando se debe persistir en el repositorio de información. Los servicios
ofertados por la interfaz de la capa de acceso a datos son invocados desde
la capa de negocio en base a los requerimientos de los procesos en ella
implementados.
-17 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
Si atendemos a una aplicación web común implementada en java sobre una base de
datos relacional, lo más probable es encontrarse con un modelo arquitectónico de acceso
a datos consistente en un conjunto de servicios verticales, uno por cada una de las
entidades presentes en el modelo de datos, que ofrecen a las capas superiores las
operaciones de persistencia. Las entidades del dominio están representadas cada una por
un javabean, una clase que contiene un atributo y sus correspondientes métodos get y
set de acceso por cada miembro de la entidad, y que tienen la interesante característica
de poder ser introspeccionados, de forma que se pueda conocer lo que en última
instancia sería la estructura de una tabla en un modelo relacional.
El conjunto de interfaces remotas de los Ejbs componen la interfaz de la capa de
acceso a datos con las capas superiores, a priori la de negocio o dominio. Las clases
invocadas por el Façade, los aquí denominados DBBeans, son los que realmente
implementan la lógica de persistencia e invocan al gestor de bases de datos para
satisfacer los servicios solicitados desde negocio. Sus métodos ejecutarán las sentencias
SQL necesarias (suponiendo un gestor de bases de datos relacionales). Esta es la
arquitectura mayormente recomendada por los fabricantes de servidores de aplicaciones
(Sun, Resine CMP, Bea Systems, etc) y por los arquitectos más célebres (Martin
Fowler, Beck, etc).
El SQLProvider
Uno de los aspectos más importantes de cara al mantenimiento de una aplicación
es saber donde se encuentran las cosas dentro de ella. Así, se torna aconsejable cierta
centralización de los recursos, datos, u objetos en general que compartan un cometido
común dentro del diseño de la aplicación. Este principio de diseño, llevada al ámbito de
la interacción con el repositorio de datos, lleva a la definición del SQLProvider. Este
elemento del diseño agrupará todas la sentencias SQL5 susceptibles de ser empleadas en
la capa de acceso a datos. De esta forma, se facilita la depuración y mantenimiento de la
aplicación, dado que ante un fallo en una sentencia SQL, o un cambio en una de las
5
Lógicamente, al igual que muchas de las otras recomendaciones presentes en este documento, esto se
llevará a cabo siempre que sea posible, dado que en ciertos casos (generación dinámica de SQLs para la
generación de informes, por ejemplo), esto no es factible al 100%, o su imposición puede complicar
mucho la capa de acceso a datos.
-18 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
tablas (por ejemplo, el nombre de un campo), el desarrollador sabe donde debe tocar el
código. Llevando esta máxima un poco más allá, las sentencias SQL pueden ir
externalizadas en un fichero XML6, de forma que el mantenimiento, o el impacto de una
posible futura migración de gestor de bases de datos7, quedan reducidos al mínimo. Así,
el SQLProvider puede implementarse como una clase que, siguiendo el patrón de diseño
singleton, se instancie en la primera petición y en ese momento cargue a memoria el
contenido del fichero XML.
En definitiva, lo que se persigue es una capa de persistencia que goce de las
siguientes cualidades:
• La capa de acceso a datos encapsula toda la lógica de almacenamiento,
independizando al resto del sistema del mecanismo de persistencia. Si en un
momento dado, tuviéramos que sustituir la habitual base de datos relacional
por una base de datos orientada a objetos, o por simples ficheros XML, el
resto de la aplicación no sufriría impacto alguno.
• El empleo de un objeto servidor de sentencias SQL que las tome de un
fichero XML externo facilita la migración de una base de datos a otra, dado
que el impacto se limitaría a configuración, sin necesidad de codificación,
compilación, reempaquetamiento o despliegue.
Capa de infraestructura
Esta capa, adyacente a todas las demás de la aplicación, comprende todos
aquellos servicios susceptibles de ser requeridos desde cualquiera de las capas lógicas
de la aplicación web. La gestión de un servicio y de las clases que lo implementan se
realizará desde la concepción de un componente, es decir, una clase totalmente
independiente de la aplicación que lo utiliza. La capa de infraestructura estará formada
entonces por componentes, y por las clases gestoras necesarias para su configuración y
gestión. De esta forma, cuando una clase de cualquiera de las capas lógicas de la
aplicación requiera el uso de alguno de los servicios ofrecidos por la capa de
infraestructura (por ejemplo, el servicio de log), no tratará directamente con la clase que
implemente tal servicio, sino que lo hará por medio del interfaz que cumpla la misma.
Así mismo, la instanciación del servicio es responsabilidad de las clases gestoras de la
capa de infraestructura. La clase cliente del servicio le pedirá a la capa de
infraestructura que le facilite una instancia de la clase que implementa el servicio que
necesita. La relación entre una interfaz que defina un servicio de infraestructura y la
clase que implementa el servicio se establece en un fichero externo XML. De esta
forma:
• La sustitución de un componente que implemente un servicio de la capa
de infraestructura por otro distinto que cumpla la misma interfaz sólo
requiere modificar el fichero de configuración.
• La configuración de cada uno de los componentes irá asimismo
externalizada en ficheros XML.
6
En el diagrama, statements.xml
7
Al no existir un estándar de facto del lenguaje SQL, sino que cada fabricante añade sus propias
innovaciones o parámetros propietarios, el cambio de gestor implica habitualmente la adaptación de las
sentencias.
-19 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-20 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-21 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-22 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
-23 -
Programa de doctorado Avances en Informática Daniel Fernández Lanvin
Bibliografía
[FOWL02]
http://martinfowler.com/apsupp/appfacades.pdf
[GOF94]
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (The Gang of
Four). Design Patterns. Addison Wesley Professional Computing Series, 1994.
ISBN 0-201-63361-2
[JAKA03]
http://jakarta.apache.org
[JURI00]
Matjaz Juric, Nadia Nashi, Craig Berry, Meeraj Kunnumpurath, John Carnell,
Sasha Romanosky, J2EE Design Patterns Applied. Wrox Press Inc, 2002. ISBN
1861005288
[MARIN01]
Floyd Marinescu, EJB Design Patterns: Advanced Patterns, Processes, and
Idioms. John Wiley & Sons, 2001. ISBN 0471208310
[ROA01]
E Roman, Scott W. Ambler, Tyler Jewell. Mastering Enterprise JavaBeans,
second edition. John Wiley & Sons, 2001. ISBN 0471417114
[STXX]
http://stxx.sourceforge.net/
[MERC02]
Julien Mercay and Gilbert Bouzeid. Boost Struts With XSLT and XML. Java
World, Febrero 2002.
-24 -