Componentes en J2EE - grasia.fdi.ucm.esgrasia.fdi.ucm.es/jpavon/docencia/dso/ejb.pdf · 1 Componentes en J2EE Curso de Sistemas Distribuidos Facultad de Informática Juan Pavón Mestras
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Componentes en J2EE
Curso de Sistemas DistribuidosFacultad de Informática
Juan Pavón Mestras
Dep. Sistemas Informáticos y ProgramaciónUniversidad Complutense Madrid
n Szyperski y Pfister 97 (ECOOP 96):A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties
n Un componente se caracteriza por:n Ser una unidad de despliegue independiente
• Encapsula sus características constituyentes respecto a su entorno• Las terceras partes no pueden acceder a los detalles de
construcción del componente• No se implanta de manera parcial
n Ser una unidad de composición• Con componentes posiblemente desarrollados por otros• Debe ser suficientemente autocontenido • Especificaciones claras de lo que requiere y de lo que proporciona
• Interacciona con su entorno a través de interfaces bien definidasn No tener estado persistente
• Un componente no se distingue de otras copias del mismo• Excepto atributos no funcionales como el número de serie
• Por tanto, en un proceso se puede decir si hay o no un componente, pero no varias instancias del mismo
n El componente más útil es el que ofrece el conjunto de interfaces correcto y no tiene ninguna dependencia de contexton En la práctica, un componentes que reuniera estas
condiciones sería muy pesadon Para conseguir mayor reusabilidad (y evitar
implementaciones redundantes en el componente) se puede optar por implementar sólo la funcionalidad primordial del componente
• Esta es la tendencia en diseño OO• Problema: explosión de dependencias de contexto
n La arquitectura de JavaBeans está diseñada para dar un formato a componentes de propósito general
n La arquitectura de EJBs proporciona un formato para componentes altamente especializados en la lógica de negocio que se implantan en un entorno J2EEn Tienen más que ver en común EJBs, servlets y JSPs que
n La plataforma J2EE (Java™2 Platform, Enterprise Edition) soporta un modelo de aplicación distribuida multinivel basado en componentes escritos en Java:n Componentes cliente: aplicaciones de cliente y appletsn Componentes web: servlets y JavaServer Pages (JSP)
n Componentes de negocio: Enterprise JavaBeans (EJB)
n Los componentes J2EE pueden incluir componentes basados en JavaBeans, pero éstos no son considerados parte de la especificación J2EE
n Definir una arquitectura de componentes estándar para la construcción de aplicaciones distribuidas basadas en Java
n Separar los aspectos de lógica de negocio de otros soportados por la plataforma: transacciones, seguridad, ejecución multihilo,pooling y otros elementos de bajo nivel
n Filosofía java: Escribir una vez y ejecutar en cualquier parte
n Cubrir los aspectos de desarrollo, despliegue y ejecución del ciclo de vida de una aplicación
n Servletsn Clases escritas en Java que procesan peticiones y
construyen respuestas
n JSPn Documentos basados en texto que contienen dos tipos
de texto: una plantilla de datos estática que puede expresarse en un formato como HTML, WML o XML, y elementos JSP que determinan cómo la página construye el contenido dinámico
n Applets, páginas HTML estáticas, y clases de utilidad no se consideran componentes web en la especificación J2EE
n Los componentes se instalan en contenedores desde los que pueden utilizar los servicios de la plataforma
n El proceso de ensamblado de los componentes requiere especificar el soporte del servidor J2EEn Seguridad: usuarios autorizadosn Modelo de gestión de transacciones: relaciones entre
métodos que constituyen una transacción (tratados como una unidad)
n Java Naming and Directory Interface (JNDI): acceso a servicios de nombres y directorio
n Conectividad remota: permite que los clientes invoquen métodos en los EJBs como si estuvieran en la misma máquina virtual
n Contrato entre el cliente y el contenedor EJBn Define la vista que tiene el cliente del Enterprise Bean
(proporcionada a través del contenedor)• Define un modelo de programación uniforme para
desarrolladores que utilicen el modelo EJB
n Visión del cliente de un Enterprise Bean:• Interfaz Home (crear, eliminar y buscar objetos EJB)• Interfaz Remote (define los métodos del negocio)• Identidad de objeto (los objetos son únicos en el home )• Metadatos (permiten invocación dinámica)
n Contrato entre el EJB y el contenedorn Creación, inicialización y eliminación propias por parte
de los componentesn Asegurar la ejecución de los métodos en un contexton Visibilidad del Home mediante JNDIn Intercambio memoria-almacenamiento secundario
(session beans)n Gestión de persistencia (entity beans)
n Disponibilidad de un objeto home que lleva a cabo los procesos de búsqueda
n Implementación de servicios básicos de seguridad
• Su vida está limitada por el tiempo que el cliente interactúa con el servidor
• Los clientes acceden a session beans para acceder a la aplicación en el servidor
n Con estado o sin estado• Un carrito de compra o un convertidor de euros
n Entity beann Representa un objeto de negocio en un mecanismo de
almacenamiento persistente (p.ej., una base de datos)• Un cliente, un producto, una cuenta• La sincronización de los datos con el almacenamiento persistente
puede hacerla el EJB o el contenedorn Permiten acceso compartido desde varios clientes
n Message beann Gestiona mensajes asíncronos (JMS) que llegan al servidor
n Métodos de la lógica del negocio que pueden acceder sólo EJBs de la misma unidad de despliegue
n Hay que definir nuevas interfaces que extienden EJBLocalHome y EJBLocalObject de manera similar a la especificación de una interfaz remotan Pero los métodos no lanzan la excepción RemoteException
public class ConversorEuroEJB implements SessionBean { public double pesetas(double euros) { return euros * 166.386; } public double euros(double pesetas) { return pesetas / 166.386; }
public ConversorEuro () {} public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext (SessionContext sc) {}
n Un cliente es cualquier usuario de un EJBn Una aplicación cliente Java, una aplicación CORBA, un
servlet, otro EJB
n El cliente tiene que adquirir una interfaz home (usando JNDI) paran Crear o encontrar una instancia del EJB (que se
presenta al cliente por la interfaz Remote)n Ejecutar métodos de negocio de esa instancian Obtener una referencia serializable del EJB (un handle)n Eliminar el EJB
• Si es un session bean con estado, se liberan los recursos asociados
• Si es un session bean sin estado, probablemente se devuelva al pool de session beans disponibles
• Si es un entity bean, se elimina de la base de datos
n El contenedor asume que estos componentes no mantienen un estado conversacional entre invocaciones, con lo que pueden ser utilizado por cualquier cliente.
n No tienen identidad.n Están diseñados para que se cree un ‘pool’ de
objetos que puedan atender las peticiones concurrentes que se realicen.
n El contenedor asume que estos componentes pueden contener un estado conversacional que se debe mantener a lo largo de sucesivas invocaciones de métodos y transacciones.
n Cuando un cliente ha obtenido uno de estos objetos, tiene que utilizar esta instancia hasta el final de la sesión
Componentes de entidadcon persistencia basada en el componente
n La implementación de un componente de este tipo de componentes de entidad es responsable de implementar la persistencia. El desarrollador del EJB proporciona el código para acceder a la fuente de datos subyacente o a la aplicación correspondiente. Estas llamada se implementan en los métodos ejbCreate(), ejbRemove(),ejbLoad() y ejbStore().
Componentes de entidadcon persistencia basada en el contenedor
n El contenedor será responsable de implementar la persistencia. En vez de codificar el desarrollador del componente el acceso a datos, el contenedor será el encargado de realizar el código adecuado y de invocar su ejecución. Los campos del componente de entidad que se gestionan automáticamente, se especifican en el descriptor de despliegue.
Interacción entre componentes de sesión y de entidad
n … continuamosn El componente de sesión recibe una referencia remota
a la instancia de EJB de entidadn El componente de sesión realiza invocaciones sobre el
componente de entidadn Cuando se lanza la transacción sobre los EJB de
entidad, el contenedor lanza el SQL para almacenar en las fuentes de datos los datos modificados por el componente de sesión (a través de CMP o BMP, según corresponda).