Está en la página 1de 16

DR.

GABRIEL LEON PAREDES


gleon@ups.edu.ec
www.linkedin.com/in/gabrielleonp

Cloud Computing, Smart Cities & High-Performance


Computing
Cuenca, Ecuador

APLICACIONES
DISTRIBUIDAS
INTRODUCCION
Aplicaciones distribuidas

• Las aplicaciones y frameworks que hemos venido estudiando y utilizando hasta ahora se basan en el denominado modelo de N-capas que
separa claramente la presentación, la lógica de negocio y el acceso a los datos. Este diseño facilita sobremanera el mantenimiento de la
aplicación, ya que la separación en capas nos permite modificar una de las partes de la aplicación sin que el resto se vea afectado por el
cambio (o, al menos, viéndose afectado de forma muy localizada).
• Toda la aplicación, exceptuando el servidor de base de datos, está implementada por clases Java que se ejecutan en el contenedor web,
ejecutado a su vez por una única JVM (Máquina Virtual Java). Esta JVM da por tanto soporte a todos los servicios que ofrece el servidor web
(gestión de la seguridad en el acceso a los servlets, definición de recursos JNDI, etc.).
• Necesidades de las aplicaciones empresariales distribuidas:
• Acceso remoto a la capa de negocio.- el acceso a los BO se realiza de forma remota. Java EE proporciona dos tecnologías para
posibilitar el acceso remoto a los Java Business Objects a través de los Enterprise JavaBeans (EJB), y los Web Services (WS).
• Seguridad en el acceso a la capa de negocio.- si diseñamos aplicaciones con requisitos de seguridad estrictos (como banca, telefonía,
etc.) es necesario ser muy cuidadoso en el acceso a las operaciones de negocio. La arquitectura EJB permite dar una solución a estos
requisitos, definiendo restricciones de acceso en los enterprise beans.
• Transacciones distribuidas.- La arquitectura EJB soporta este tipo de transacciones distribuidas mediante la utilización de JTA (Java
Transaction API) y haciendo que los enterprise beans sean también recursos transaccionales. El API de transacciones de Java incluye
soporte para transacciones distribuidas utilizando el algoritmo two phase commit, un algoritmo estándar para la gestión de
transacciones distribuidas utilizado desde hace muchos años por los sistemas de gestión de transacciones.

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Arquitectura: Enterprise Java Beans (EJB)
• La solución propuesta por el mundo
Java para resolver las necesidades
anteriores es la arquitectura Enterprise
JavaBeans.
• Con esta arquitectura se hace posible la
creación de recursos so;ware
distribuidos
(denominados componentes EJB o
enterprise beans) que viven en un
contenedor y que proporcionan
servicios que pueden ser invocados de
forma segura, transaccional y remota.
• El contenedor en el que viven los
enterprise beans está incluido en un
servidor de aplicaciones y es el
encargado de proporcionar los servicios
comentados en el apartado anterior
(acceso remoto, seguridad y
transaccionalidad) así como de
gesEonar su ciclo de vida.

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Enterprise Java Beans (EJB)

• La tecnología Enterprise JavaBean (EJB) proporciona la posibilidad de usar componentes soAware transaccionales y seguros que residen en el servidor de
aplicaciones. Los componentes soAware (componentes EJB o enterprise beans) pueden ser usados desde cualquier programa Java de forma distribuida.
• El servidor de aplicaciones proporciona los servicios necesarios para el funcionamiento de los enterprise beans. Entre estos servicios destacan los relacionados con
el acceso remoto, la generación automáHca de transacciones, la seguridad en el acceso al componente y la escalabilidad del componente mediante la definición de
clusters de servidores que gesHonan un conjunto único de enterprise beans.
• La arquitectura Enterprise JavaBeans permite el desarrollo de aplicaciones distribuidas en las que se realizan peHciones de métodos de negocio (servicios) a
objetos remotos que residen en servidores específicos. El contenedor EJB manHene estos objetos remotos, dándoles soporte, manteniendo su ciclo de vida y
filtrando y procesando las peHciones de los clientes.
• Ventajas:
• Manejo de transacciones: apertura y cierre de transacciones asociadas a las llamadas a los métodos del bean.
• Seguridad: comprobación de permisos de acceso a los métodos del bean.
• Concurrencia: llamada simultánea a un mismo bean desde múlHples clientes.
• Servicios de red: comunicación entre el cliente y el bean en máquinas disHntas.
• Ges6ón de recursos: gesHón automáHca de múlHples recursos, como colas de mensajes, bases de datos o fuentes de datos en aplicaciones heredadas que
no han sido traducidas a nuevos lenguajes/entornos y siguen usándose en la empresa.
• Persistencia: sincronización entre los datos del bean y tablas de una base de datos.
• Ges6ón de mensajes: manejo de Java Message Service (JMS).
• Escalabilidad: posibilidad de consHtuir clusters de servidores de aplicaciones con múlHples hosts para poder dar respuesta a aumentos repenHnos de carga
de la aplicación con sólo añadir hosts adicionales.
• Adaptación en 6empo de despliegue: posibilidad de modificación de todas estas caracterísHcas en el momento del despliegue del bean.

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Tipos de Enterprise Java Beans (EJB)

• SessionBeans
• Servicios que se ejecutan de forma síncrona, el cliente se bloquea hasta que terminan su ejecución
• Encapsula la lógica de negocio de la aplicación
• El cliente invoca los métodos, pero el contenedor puede interceptar la llamada para ofrecer seguridad, gesWón de transacciones,
concurrencia y llamadas remotas
• Message-DrivenBeans
• Servicios que se ejecutan de forma asíncrona
• El cliente no se bloquea al iniciar la ejecución
• Lo habitual es uWlizar JMS (Java Message Service)

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Session Beans

• Stateless (@Stateless). Sin estado


• No se manLene estado en memoria entre llamadas, normalmente se guarda en base de datos
• Permite una arquitectura muy escalable. El contenedor crea un pool de instancias que es comparLdo por los diferentes
clientes
• Stateful (@Stateful). Con estado
• Se manLene el estado mientras el cliente usa los diferentes servicios.
• Ciclo de vida similar a la sesión de los servlets
• Singleton (@Singleton). Único
• ManLene el estado, pero existe un único bean para todos los clientes
• Remotos (@Remote) o locales (@Local)
• Los beans se pueden uLlizar de forma remota mediante la tecnología RMI
• Se debe crear un Interfaz

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Stateless Session Bean

• Debe tener un constructor sin parámetros y no debe usar atributos


• No se garanLza que los valores de los atributos se mantengan entre llamadas
• Ciclo de vida
• @PostConstructor. Construye el bean
• @PreDestroy. Libera recursos

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Stateful Session Bean

• Empieza cuando el cliente adquiere al bean.


• Finalizan cuando se invoca a un método marcado con@Remove, debe exisLr al menos uno
• Para mantener el estado deben poder serializarse
• Cliclo de vida
• @PostConstructor y @PreDestroy
• @PrePassivate (antes de serializarse) y @PostAcLvate

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Singleton Session Bean

• Los clientes comparte entre si el estado porque usan el mismo objeto


• Hay que tener en cuenta los aspectos de concurrencia
• Se puede forzar una creación temprana: @Startup, y forzarlo a las dependencias: @DependsOn
• Por defecto, los métodos están sincronizados

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Ges<ón de dependencias

• Los componentes definen referencias a otros recursos


• Dependency Lookup (búsqueda de dependencias). Se busca manualmente mediante JNDI (Java Naming and Directory Interface)
• Dependency Injection (inyección de dependencias). El contenedor nos inyecta las dependencias
• Anotaciones en el atributo o método set: @EJB, @PersistenceContext, @PersistenceUnit...
• Se realizan antes de invocar cualquier método

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Ges<ón de transacciones

• Propiedades
• Atomicidad. O todas o ninguna
• Consistencia. Datos coherentes al finalizar
• Aislamiento. Los cambios sólo son visibles para quien esta realizando la transacción, el resto sólo los ve al hacer commit
• Durabilidad. Una vez completados son duraderos
• Tipos
• Resource-local transacWons. Transacciones gesWonadas por el recurso
• Container transacWons. Transacciones gesWonadas por el contenedor, se involucran varios recursos. Se implementan con Java
TransacWon API (JTA)
• Por defecto, los métodos de los beans son transaccionales
• Al finalizar el método, se realiza commit; si se produce una excepción se hace rollback

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


Seguridad

• Dominio. Se configuran las políWcas de seguridad y la gesWón de los usuarios y contraseñas


• Usuarios y Grupos. Un usuario es una idenWdad única reconocida por el servidor. Un grupo es un conjunto de usuarios, es opcional y facilita
la gesWón
• Configuración: consola de administración de glassfish: configuraciones>server-config>Seguridad>Dominios
• Rol. Es un nombre abstracto para configurar el permiso de acceso de un conjunto de recursos de una aplicación. Se configura en el fichero
web.xml
• Mapea de roles. Se deben mapear los roles con los grupos
• En el fichero glassfish-web.xml. Por defecto no se despliega, para ello, enfocar el proyecto: new>GlassFish>Descriptor
• Mecanismos de autenWcación
• Básico. Se gesWona por el servidor
• Formulario. Se deben crear formularios
• Mediante una enWdad externa
• Restricciones
• Web. En el fichero web.xml, se configuran las restricciones asociadas a urls:
• “/security/user/*”
• EJB
Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes
Seguridad

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


EjemploEJB
h"ps://github.com/gabusleon/EjemploEJB

1. Crear recurso en glassfish


2. Configurar JSF 2.3

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes


“Desarrollo de aplicaciones web distribuidas de
código abierto (Java EE): Principios tecnológicos”,
Referencias Bernal, J., UPM, 2012.
“Java EE 8 Developmnet with Eclipse”, Kulkarni,
R.., Packt, 3th EdiLon, 2018.

Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes

También podría gustarte