TEMA 20.docx
Document Details
Uploaded by Oganesson93
Universidad de Valladolid
Tags
Full Transcript
**Tema 20**. Arquitectura JEE: características de funcionamiento. Estructura de una aplicación. Elementos constitutivos. Empaquetado y despliegue. Productos y herramientas. La arquitectura JEE (Java 2 Enterprise Edition) proporciona una [plataforma] para el [desarrollo y ejecución] de [aplicaciones...
**Tema 20**. Arquitectura JEE: características de funcionamiento. Estructura de una aplicación. Elementos constitutivos. Empaquetado y despliegue. Productos y herramientas. La arquitectura JEE (Java 2 Enterprise Edition) proporciona una [plataforma] para el [desarrollo y ejecución] de [aplicaciones en el lenguaje de programación Java]. La plataforma JEE está definida por una [especificación] para establecer: - Las [pautas, reglas y servicios] que deben ofrecer los [servidores de aplicaciones] compatibles con JEE. - Las [normas generales] que han de cumplir los [desarrolladores] que quieran crear aplicaciones empresariales compatibles con JEE. Para ello se debe utilizar [arquitecturas de N capas] distribuidas y utiliza componentes de software modulares ejecutándose sobre un servidor de aplicaciones. Este estándar a la hora de desarrollar aplicaciones distribuidas para sistemas empresariales ha dejado obsoleto el clásico modelo cliente-servidor. Está [soportada por múltiples sistemas operativos], al ser una plataforma basada en el lenguaje Java, es posible desarrollar arquitecturas basadas en JEE utilizando cualquier sistema operativo donde se pueda ejecutar una [máquina virtual Java]. La arquitectura Java EE está basada en tres conceptos clave: - [Servicios]: Permiten que el programador se concentra en su lógica de negocio y usar estos servicios para su aplicación. Estos servicios pueden tener funcionalidades de seguridad, comunicaciones de red, logging, integridad de datos, etc. Estos servicios son proporcionados por un contenedor. - [Contenedores]: Son [entornos en tiempo de ejecución], donde se ejecutan los componentes y estos pueden utilizar los servicios. - [Componentes]: Un componente JEE es una unidad funcional autónoma escrito en leguaje Java dentro de una aplicación JEE. Funciona de forma independiente y agrupada e interactúa con otros componentes JEE. **Estructura de una aplicación JEE** El desarrollo de aplicaciones bajo JEE se basa en la [separación de capas]. Esta separación de capas permite un [reparto de diferentes responsabilidades] proporcionando una separación clara entre presentación (interfaz), modelo (lógica) de negocio y datos disminuyendo el acoplamiento entre las diferentes partes de las mismas. El número de capas de una aplicación JEE variará según su complejidad y/o necesidades. Aun así, la estructura sugerida como modelo para el desarrollo de aplicaciones JEE es: - [Capa de cliente]: Se encarga de la interacción con el usuario. Es la capa donde se localizan los diferentes clientes de nuestras aplicaciones, [applets o aplicaciones cliente]. En una aplicación empresarial con JEE nos encontraremos habitualmente con los siguientes tipos de aplicaciones cliente: - Aplicaciones de escritorio tradicionales. - Navegadores web. - Aplicaciones para pequeños dispositivos. - [Capa de presentación o Web]: La capa de presentación controla la lógica de interacción entre el cliente y la aplicación. Es la capa intermediaria entre la capa de cliente y la capa de lógica de negocio. - [Capa de lógica de negocio]: responsable de la lógica de la aplicación propiamente dicha. - [Capa de acceso a datos]: Esta es la capa donde se realizan diferentes tareas de integración con los sistemas de información y donde residen los sistemas de información de nuestra aplicación (bases de datos, servicio de directorio y los diferentes servicios externos a los que deba acceder la aplicación. [Patrón MVC] Este patrón no solo es utilizado para el desarrollo de aplicaciones JEE se puede utilizar para otro tipo de aplicaciones. En este patrón se utilizan 3 capas diferentes: - [El Modelo]: Es la representación de la información con la cual el sistema opera, por lo tanto, gestiona todos los accesos a dicha información, tanto consultas como actualizaciones, implementando también los privilegios de acceso que se hayan descrito en las especificaciones de la aplicación (lógica de negocio). Envía a la \'vista\' aquella parte de la información que en cada momento se le solicita para que sea mostrada (típicamente a un usuario). Las peticiones de acceso o manipulación de información llegan al \'modelo\' a través del \'controlador\'. - [El Controlador]: Responde a eventos (usualmente acciones del usuario) e invoca peticiones al \'modelo\' cuando se hace alguna solicitud sobre la información (por ejemplo, editar un documento o un registro en una base de datos). También puede enviar comandos a su \'vista\' asociada si se solicita un cambio en la forma en que se presenta el \'modelo\' (por ejemplo, desplazamiento o scroll por un documento o por los diferentes registros de una base de datos), por tanto, se podría decir que el \'controlador\' hace de intermediario entre la \'vista\' y el \'modelo\' (véase Middleware). - [La Vista]: Presenta el \'modelo\' (información y lógica de negocio) en un formato adecuado para interactuar (usualmente la interfaz de usuario), por tanto, requiere de dicho \'modelo\' la información que debe representar como salida. **Elementos constitutivos de JavaEE** Se dividen en tres categorías: componentes empresariales, servicios y contenedores. [Componentes empresariales] Un componente es [una unidad funcional de software] que está embebida en la aplicación con sus [ficheros y clases asociadas] y se comunica con otros componentes. Los componentes JEE están escritos en lenguaje de programación Java y son compilados igual que otro programa de este lenguaje. Cuando estos componentes son ensamblados en una aplicación JEE, se verifican para comprobar si son elementos bien formados y de acuerdo a la especificación. Una vez ensamblados pueden ser desplegados en cualquier servidor JEE donde serán ejecutados. Son los componentes de software reutilizables que se utilizan para construir aplicaciones JEE. Existen componentes para cada una de las capas. [Capa de cliente]: Son todos aquellos que se ejecutan en la máquina del cliente. Pueden ser [Applets o aplicaciones cliente. ] [Capa de presentación o Web]: Se [ejecutan en el contenedor web] del servidor JEE. [Responsables de recoger las peticiones de los clientes y de componer la presentación dinámica de los datos de respuesta]. - [Servlets]: son [clases java] [que implementan un controlador que se encarga de recibir las peticiones de los componentes clientes, las procesan y] [selecciona las operaciones de la aplicación (componentes de la capa de negocio) a realizar dependiendo de estas peticiones y determinan como ofrecer una respuesta eligiendo la vista a presentar.] - [JSP (Java Server Pages)]: Una página JSP es un [documento que contiene una plantilla de texto fija, junto a unas etiquetas específicas para incluir código java embebido en el documento]. [Este código embebido se ejecutará en tiempo de ejecución y generará el contenido dinámico.] [Capa de lógica de negocio]: Son los que implementan la lógica de negocio y se ejecutan en la capa de negocio. Son los [EJB] (enterprise java beans): \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-- Un EJB (Enterprise Java Bean) es un componente que debe ejecutarse de un contenedor de EJBs y se diferencia bastante de un JavaBean normal. Un JavaBean es un objeto Java al cual accedemos de forma directa desde nuestro programa. Sin embargo, un EJB es un componente al cual no podemos acceder de una forma tan directa y siempre accedemos a través de algún tipo de intermediario. Este intermediario nos aportará una serie de servicios definidos por los estándares en los cuales el EJB se puede apoyar. Los EJB de sessión disponen de dos proxies (intermediarios) a través de los cuales accedemos a ellos: - Proxy Local: Es el intermediario que nos permite un acceso al EJB desde la misma máquina virtual. - Proxy Remoto: Es el intermediario que nos permite el acceso al EJB desde una máquina virtual remota. La clase correspondiente al bean implementará un interface local o remoto. \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-- Los EJBs los hay de tres tipos: - [de sesión]: Representan procesos de negocio (funcionalidades de la aplicación). - [beans de sesión con estado (Stateful EJB):] Cada instancia de un stateful EJB "atiende" invocaciones de un único "cliente" y mantiene información sobre él en los valores de sus atributos (estado) y se mantienen entre las distintas invocaciones de un mismo "cliente". Un cliente puede ser un componente cliente, un componente Web, u otro EJB. - [beans de sesión sin estado (Stateless EJB):] el estado de un stateless EJB no contiene información específica de un cliente y para el "cliente" todos los stateless EJB son idénticos (e intercambiables). Estos realizan tareas genéricas e idénticas para todos los clientes. Existe una serie de instancias que se encuentran en un pool y estas instancias son compartidas por los diferentes clientes. - [Singleton EJB]: contenedor garantiza que existe una única instancia del objeto, compartida por todos los "clientes" del EJB (estado global compartido). Se suelen utilizar para gestión de datos globales de la aplicación. - [de entidad]: Los EJB (Enterprise JavaBeans) de entidad son una categoría de EJB que se utiliza para representar y gestionar datos persistentes en una aplicación Java EE. Desde Java EE 5.0 desaparecen y se utiliza [entidades JPA]. (\*) JPA es una API estándar de Java EE para el mapeo objeto-relacional. - [dirigidos por mensajes]: Actúan como listeners de eventos JMS (Java Message Service) y realizan el tratamiento de esos mensajes. Esos mensajes JMS pueden ser enviados por cualquier componente de una aplicación Java EE (clientes, componentes Web, otros EJBs). Los "clientes" de un Message-Driven EJB no invocan directamente a sus métodos, simplemente envían mensajes JMS que quedan encolados y los EJB suscritos a esa cola se activan a recibir dicho mensaje. (\*) JPA Existe una especificación llamada ORM (Mapeo relacional de objetos). JPA es otra especificación del tipo ORM que proporciona una API que a su vez utiliza el API JDBC para la conexión con la base de datos. Pero JPA es solo una especificación que hay que implementar, la implementación más popular es Hibernate. [Capa de acceso a datos]: Típicamente emplea JDBC para acceso a bases de datos o JMS y conectores JEE para acceder a sistemas no-java. En esta capa se encuentran las bases de datos relacionales, los sistemas no-java o los servicios externos a los que deba acceder la aplicación. [Servicios] Son los servicios proporcionados por JEE que se utilizan para desarrollar aplicaciones empresariales escalables y seguras. Algunos de los servicios: a. Servicios de transacciones: proporcionan la capacidad de realizar transacciones atómicas en una o más operaciones de base de datos. b. Servicios de seguridad: que permiten a las aplicaciones definir y gestionar políticas de seguridad. Esto incluye la autenticación y autorización de usuarios, así como el control de acceso a recursos protegidos. c. Servicios de concurrencia: para gestionar llamadas concurrentes a los componentes. d. Servicios de conectividad: proporcionan la capacidad de conectarse a diferentes sistemas de bases de datos y aplicaciones. e. Servicios de persistencia: proporciona capacidad para el almacenamiento persistente de objetos y estados de objetos, normalmente realizado en bases de datos relacionales. f. Servicios de mensajería: proporcionan la capacidad de enviar y recibir mensajes asíncronos entre diferentes componentes empresariales. [Contenedores] Los contenedores se encargan de proporcionar un entorno de ejecución: - Gestionando el Ciclo de vida de los componentes de la aplicación. - Dando acceso a servicios de la plataforma: Seguridad, transacciones, persistencia, conectividad, etc. ![](media/image2.png) Los contenedores se dividen en las siguientes categorías: [Contenedor Web] [El contenedor de servlets] [Gestiona el ciclo de vida de un servlet]: - Carga e inicializa el servlet - El servlet procesa cero o más peticiones de clientes (por cada petición se lanza un hilo) - Destruye el servlet (en un momento dado o cuando se apaga) La inicialización es la primera fase del ciclo de vida y representa la creación e inicialización del Servlet. Todos los Servlets deben implementar la interfaz javax.servlet.Servlet. Esta interfaz define el método init() para la fase de inicialización del ciclo de vida del Servlet. Cuando un contenedor carga un Servlet, invoca el método init() antes de servir cualquier petición. La fase de servicio del ciclo de vida del Servlet representa todas las interacciones con las peticiones hasta que el Servlet es destruido. La interfaz Servlet lo representa mediante el método service(). Este método se invoca una vez por petición y es el responsable de generar las respuestas. La especificación Servlet define que el método service() tiene dos parámetros: un objeto javax.servlet.ServletRequest y un javax.servlet.ServletResponse. Estos dos objetos representan la petición del cliente de contenido dinámico y la respuesta del Servlet al cliente, respectivamente. Por defecto, un Servlet es multi-hilo, lo que significa que típicamente el contendor sólo carga una instancia de un Servlet. La inicialización se realiza sólo una vez, y las posteriores peticiones se manejan concurrentemente por hilos ejecutando este método service(). En realidad, los servlets que mas se utilizarán serán los servlets sobre HTTP: javax.servlet.http.HttpServlet. La implementación del método service() de HttpServlet, es un poco especial ya que tiene algunas modificaciones. Cada vez que llega una petición que hay que servir, llama a uno de los siete métodos ayudantes. Estos siete métodos se corresponden directamente a los siete métodos HTTP y son los siguientes: doGet(), doPost(), doPut(), doHead(), doOptions(), doDelete(), y doTrace(). Se invoca el método apropiado que concuerde con el método de una petición HTTP dada. La fase de destrucción del ciclo de vida del Servlet representa que el contenedor va a dejar de usar el Servlet. La interfaz Servlet define el método destroy() que corresponde con la fase destrucción del ciclo. Cada vez que un Servlet se va a dejar de usar, el contendor llama al método destroy(), permitiendo que el Servlet finalice y limpie cualquier recurso que hubiera creado. [Proporciona los servicios de red] para las peticiones y respuestas que se envían. Todo contenedor de servlet debe soportar HTTP como protocolo de comunicación, aunque también puede soportar otros protocolos como HTTPS. [Un contenedor JSP] proporciona los mismos servicios que un contenedor de servlets a los componentes JSP. [Los contenedores EJB proporcionan]: - Gestión del ciclo de vida de los EJB - Servicios: - Gestión de la persistencia - Servicio de nombres - Mensajería asíncrona - Seguridad de acceso - Gestión de transacciones - Gestión de concurrencia - Balanceo de carga Tanto los contenedores Web como EJB proporcionan acceso estandarizados a los sistemas de información. Para cada contendor el desarrollador tiene que especificar: - Los componentes de cada contenedor: Servlets, JSPs (Java Server Pages), EJBs (Enterprise Java Beans) - Los descriptores de despliegue (deployment): Ficheros XML que describen la configuración de los componentes de aplicación. Luego también existe los ficheros de despliegue de las aplicaciones. **Empaquetado y despliegue** Una aplicación Java EE está formada por un empaquetamiento de una o varias unidades conocidas con el nombre de módulos. Existen distintos tipos de módulos dependiendo de su contenido y el contenedor donde se vaya a ejecutar. Los distintos módulos van empaquetados en ficheros JAR o WAR. JAR Los ficheros JAR empaquetan clases Java. Un fichero JAR puede contener clases Java compiladas (ficheros.class) junto con otros ficheros JAR. Pueden ser Enterprise JavaBeans (EJB) y módulos de la capa de aplicación cliente. La carpeta META-INF que incluye el fichero de Manifiesto (MANIFEST.MF). Este fichero nos aporta información adicional sobre nuestro fichero JAR. En el caso de EJB, nos podemos encontrar en esta carpeta el descriptor de despliegue ejb-jar.xml. WAR Los archivos WAR son un tipo especial de JAR utilizado para distribuir contenido de las aplicaciones Web en tecnología JEE: páginas Web HTML o JSP, css, clases Java, servlets Java, archivos XML, librerías de etiquetas (tag libraries) y otros recursos. Es el método estándar empleado para empaquetar una aplicación web y dejarla lista para su distribución y acceso a través de servidores web con soporte para servlets y páginas JSP. Utilizando el archivo WAR se puede distribuir una aplicación web completa, compuesta por cualquier número de recursos, en una única unidad de distribución, en un único archivo. Los archivos WAR incluyen carpetas y archivos especiales. Se incluye la carpeta META-INF con el manifiesto y además está la carpeta WEB-INF específica de las aplicaciones Web. /META-INF/manifest.mf: manifiesto. / \*.html \*.jsp \*.css: Este directorio base contiene los elementos típicamente empleados para un sitio web: Documentos HTML, CSS (\"Cascading Style Sheets\"), JavaScript y Graficas; además en este directorio residen los JSP\'s a utilizarse en el WAR, aquí no residen los Servlets estos deben ser colocados en otra parte del WAR ya que son Clases Java puras. /WEB-INF/web.xml: proporciona información sobre configuración y despliegue de los componentes web que componen una aplicación web: Página de Inicio, configuración de Servlets, de filtros, sesiones y seguridad. El descriptor de despliegue de la aplicación Web sólo hace falta si un módulo Web contiene algún Servlet, filtro, escuchador, o algún parámetro inicial de la Aplicación; si sólo contiene páginas JSP y archivos estáticos no hará falta incluir el archivo web.xml. /WEB-INF/classes/: Este directorio contiene las clases Java utilizadas dentro del WAR, es dentro de este directorio que generalmente residen los Servlets diseñados para el WAR. /WEB-INF/lib/: Este directorio contiene los archivos JAR que serán utilizados por la aplicación, estos generalmente corresponden a las clases (JAR\'s) utilizadas para conectarse a Bases de Datos o aquellas utilizadas por librerías de JSP\'s. /WEB-INF/tag/: Un directorio que contiene archivos de etiquetas.tag. ![](media/image4.png) EAR Los ficheros EAR (*Enterprise Archive*) son la forma estándar de empaquetar en un único fichero distintas aplicaciones web (ficheros WAR) y distintos ficheros JAR con clases Java. Los ficheros JAR que se incluyan en el EAR se ponen a disposición de cualquier aplicación WAR incluida en el EAR. Esto es, cuando un fichero EAR con un conjunto de ficheros JAR y ficheros WAR se despliega en el servidor de aplicaciones todos sus JAR se incluyen de forma automática en el *classpath* de cada WAR. El directorio META-INF, en el que se encuentra los distintos ficheros de configuración necesarios. Como mínimo debe contener el descriptor de despliegue application.xml en el que se identifican los módulos que se incluyen en él. El proceso de empaquetado y despliegue de una aplicación JEE puede ser automatizado utilizando herramientas de construcción como Apache Maven o Gradle. Estas herramientas pueden generar el archivo de despliegue automáticamente a partir del código fuente y los archivos de configuración, lo que simplifica el proceso de empaquetado y despliegue. **Productos y herramientas** Para desarrollar aplicaciones empresariales escalables y seguras. A continuación, se describen algunos de los productos y herramientas más populares en la plataforma JEE: - Servidor de aplicaciones JEE: es un software que proporciona un entorno de ejecución para los componentes empresariales de una aplicación JEE. Algunos de los servidores de aplicaciones JEE más populares son Oracle WebLogic, IBM WebSphere y JBoss. - Java Development Kit (JDK): es un conjunto de herramientas de software que se utilizan para desarrollar aplicaciones Java. El JDK incluye el compilador Java, las bibliotecas Java y otras herramientas de desarrollo. - Eclipse: es un entorno de desarrollo integrado (IDE) para Java que proporciona una serie de herramientas para el desarrollo de aplicaciones JEE. Eclipse incluye un editor de código, depurador, compilador y otras herramientas útiles para desarrollar aplicaciones empresariales. - Apache Maven: es una herramienta de construcción de proyectos que se utiliza para automatizar el proceso de empaquetado y despliegue de aplicaciones JEE. Maven puede generar automáticamente el archivo de despliegue a partir del código fuente y los archivos de configuración. - Hibernate: es un framework de mapeo objeto-relacional (ORM) que se utiliza para simplificar el acceso a la base de datos en aplicaciones JEE. Hibernate permite a los desarrolladores trabajar con objetos Java en lugar de SQL, lo que simplifica el proceso de acceso a la base de datos.