Curso de MDB en Java
Curso de MDB en Java
Curso de MDB en Java
Java
Java SE
Java EE
La plataforma Java EE está construida sobre la plataforma Java SE. La plataforma Java EE
proporciona una API y un entorno de tiempo de ejecución para desarrollar y ejecutar
aplicaciones de red seguras, escalables, confiables y de múltiples niveles.
EJB
Con la tecnología JEE Enterprise Java Beans es posible desarrollar componentes (Enterprise
beans) que luego puedes reutilizar y ensamblar en distintas aplicaciones que tengas que
hacer para la empresa.
El contenedor EJB es algo así como el sistema operativo en el que éstos residen.
Cuando estés trabajando con componentes tendrás que dedicarle tanta atención al
despliegue (deployment) del componente como a su desarrollo. Entendemos por despliegue
la incorporación del componente a nuestro contenedor EJB y a nuestro entorno de trabajo
(bases de datos, arquitectura de la aplicación, etc.). El despliegue se define de forma
declarativa, mediante un fichero XML (descriptor del despliegue, deployment descriptor) en
el que se definen todas las características del bean. 3
1
Extraído de https://docs.oracle.com/javaee/6/firstcup/doc/gkhoy.html
2
Extraído del libro ¿Cómo programar? Autor Deitel Paul, Deitel Harvey Décima Edición
3
Extraído de http://www.jtech.ua.es/j2ee/2003-2004/abierto-j2ee-2003-2004/ejb/sesion01-
apuntes.htm
Enterprise JavaBeans (EJB) es una arquitectura de componentes de servidor que simplifica el
proceso de construcción de aplicaciones de componentes empresariales distribuidos en java.
Los EJB:
3. Son reusables.
Una aplicación EJB está formada por componentes enterprise beans. Cada enterprise
bean es un bloque de construcción reusable. Hay dos formas esenciales de reusar un
enterprise bean a nivel de desarrollo y a nivel de aplicación cliente. Un bean
desarrollado puede desplegarse en distintas aplicaciones, adaptando sus
características a las necesidades de las mismas. También un bean desplegado puede
ser usado por múltiples aplicaciones cliente.
- Gestión de la persistencia
- Mensajería asíncrona
- Seguridad de acceso
- Gestión de transacciones
- Balanceo de carga
Existen tres tipos de EJB : Entity Beans, Session Beans y Message-driven Beans.
Entity Beans:
Los Entity Beans representan entidades de negocio y proveen acceso a datos a través de
métodos. Se basan en la idea del mapeo objeto/relacional (ORM). Son de dos tipos: BMP
(Bean Managed Persistence) donde se delega las tareas de persistir, buscar y recuperar
entidades y CMP (Container Managed Persistence) donde la persistencia la gestiona el
contenedor de forma en el que el desarrollador no se preocupa de las sentencias SQL de
inserción, recuperación, etc.
En EJB 3.0, los beans de entidad fueron reemplazados por la API de persistencia de Java
(que posteriormente se separó por completo a su propia especificación a partir de EJB 3.1).
Los Entity Beans se han marcado como candidatos para poda a partir de Java EE 6 [1] [2] y,
por lo tanto, se consideran una tecnología obsoleta
Session Beans:
Los Session Beans gestionan la lógica de negocio para un cliente. Son de dos tipos: Stateless
Session Beans no mantienen el estado entre invocaciones y Stateful Session Beans guardan
el estado entre invocaciones de un mismo cliente. Ejemplo: Un usuario ingresa a una compra
virtual, su estancia durante la aplicación puede durar entre un y varios minutos, un EJB de
tipo sesión stateful permite guardar el estado del EJB durante toda la estadia del cliente, sin
embargo, un EJB de tipo sesión stateless solo estaria activo por cada invocación de selección
de un articulo.
Un carrito de compras por ejemplo utiliza Stateful Session Beans para mantener el estado
entre invocaciones.
Message-driven Beans:
Permiten modelar la lógica de negocio mediante colas JMS. 4
Un Message-Driven Bean o MDB (EJB dirigido por mensajes) es un oyente de mensajes que
puede consumir mensajes de una cola. Dichos mensajes pueden ser enviados por cualquier
componente JavaEE (cliente, otro EJB o una componente Web como un servlet).
Conceptualmente se diseñaron para que el servidor de aplicaciones proporcione facilidades
de multi-threading, esto es que múltiples consumidores procesen mensajes
concurrentemente sin necesidad de desarrollar código adicional.
Así, los MDBs proporcionan dicha facilidad al manejar los mensajes entrantes mediante
múltiples instancias de beans alojados en el pool del servidor de aplicaciones.
Con respecto a otros EJBs, la diferencia fundamental con cualquier otro EJB es que el MDB
no tiene interface local o remota. Solo la clase bean. Se parece a un Stateless Session Bean
(SSB) porque sus instancias son short-lived y no retienen estado para un cliente específico.
Pero sus variables pueden contener información de estado entre los diferentes mensajes de
cliente: por ejemplo, un conexión a una base de datos, o una referencia a un EJB, etc..
JMS
JMS es la solución de Sun para los sistemas de mensajes, empecemos por saber que es un
sistema de mensajes empresarial:
En las comunicaciones cliente servidor, los datos que se intercambian entre las dos partes
necesitan de una comunicación sincrona, es decir, que las dos partes esten presentes en el
momento de la comunicación. Los sistemas de mensajes aportan una serie de mejoras a la
comunicación entre aplicaciones que no tienen por que residir en la misma máquina.
La anterior es una de las ventajas de JMS, pero no la única. La comunicación anterior tiene
dos extremos, el productor (A) y el consumidor (B). JMS soporta otro tipo de comunicaciones
que Sun denomina Publisher/Subscriber, traducido seria Publicador (Publicante)/Suscriptor.
En este tipo de comunicación, la aplicación A publica su mensaje en el servicio JMS y lo
reciben todas las aplicaciones que esten suscritas al servicio JMS al que se envió el mensaje,
esta forma de comunicación es exactamente igual que la que se produce el los chats del IRC.
Otra de las ventajas de usar JMS (o cualquier otro sistema de mensajes) es que las
aplicaciones se pueden cambiar simplemente asegurándose que la nueva aplicación entiende
los mensajes que se intercambian.
Arquitectura de JMS
Objetos administrados Los objetos JMS a los que se dirigen las comunicaciones
Objetos administrados
Los objetos administrados son el punto al que se comunican los clientes JMS para enviar o
recibir mensajes, se denominan objetos administrados por que los crea el administrador (en
la implementación de referencia mediante j2eeadmin). Implementan las interfaces JMS y se
sitúan en el espacio de nombres de JNDI (Java Naming and Directory Interface) para que los
clientes puedan solicitarlos.
ConnectionFactory: Se usa para crear una conexión al proveedor del sistema de mensajes.
Destination: Son los destinos de los mensajes que se envían y el recipiente de los mensajes
que se reciben.
Mensajes
Header: Es la cabecera del mensaje, contiene una serie de campos que le sirven a los
clientes y proveedores a identificar a los mensajes. Aquí tines la lista de campos completa :
JMSDeliveryMode int Puede ser de tipo PERSISTENT, entonces se envia una unica
vez, o de tipo NON_PERSISTEN, de manera que se envia como mucho una vez, lo cual
incluye tambien que no sea enviado nunca. PERSISTENT y NON_PERSISTENT estan definidas
como constantes.
JMSTimestamp long Pues eso, la hora a la que se envio el mensaje.
JMSExpiration long La hora hasta la cual el mensaje es valido, si es 0 quiere decir que no
caduca nunca.
JMSType String Este campo lo puede usar el programa de mensajeria para almacenar
el tipo del mensaje.
Dominios de mensajería
Existen dos modelos/dominios de mensajería:
Punto a Punto
Como hemos mencionado, bajo el modelo PTP, un mensaje se consume por un único
consumidor (1:1), pero pueden haber varios emisores. El destino del mensaje es
un cola definida y con un nombre (de manera opuesta a un tópico bajo el modelo Pub/Sub).
Dicho de otra manera, se trata de un modelo FIFO, en el cual el mensaje encolado será el
primero en salir de la cola (suponiendo que tienen el mismo nivel de prioridad).
Así pues, bajo el modelo punto a punto, el emisor envía un mensaje a una cola definida (con
nombre) con un nivel de prioridad, y el receptor extrae el mensaje de la cola. Al extraer el
mensaje, el receptor envía un acuse de recibo a la cola para confirmar su correcta recepción
(ACK).
- Reglas de programación:
Los MDB son POJOs que siguen un conjunto de reglas y que en ocasiones tienen
anotaciones:
Mejores prácticas
- Modulariza: La lógica no debe ser incluida dentro de los métodos del listener de
mensajes. La lógica de negocio debe estar modularizada y desacoplada de los
aspectos específicos de la mensajería.
- Elige el tipo de mensaje con cuidado: La elección del tipo de mensaje no siempre es
tan obvia como puede parecer. Se podría utilizar tipo texto XML esto conlleva que el
acoplamiento entre sistemas sea débil, si se utiliza un objeto XML estaremos
obligados a que conozcan dicho objeto.
- Cuidado con los mensajes venenosos: Un mensaje venenoso es un mensaje que
recibe el MDB para el cual no está preparado. Por ej. Nuestro MDB está desarrollado
para recibir un objectMessage y recibimos texto XML.
Vamos a la práctica
http://www.jtech.ua.es/j2ee/2004-2005/modulos/ejb/apendice01-apuntes.htm
https://www.ibm.com/support/knowledgecenter/es/SSEQTP_9.0.5/com.ibm.websphere.base
.doc/ae/tejb_mdb.html
Protocolo T3:
https://programacion.net/articulo/bea_weblogic_introduccion_129/5#:~:text=El
%20contenedor%20EJB%20de%20WebLogic,y%20beans%20dirigidos%20por%20mensajes.
JMS:
https://www.oscarblancarteblog.com/2014/07/25/java-message-service-jms/
Introducción a JMS
Universidad Politécnica de Valencia
https://www.youtube.com/watch?v=fUxy-hSHXoU
SESION 2
El archivo ejb-jar.xml describe la información estructural sobre todos los enterprise beans
incluidos en ese paquete y sus relaciones. Su descripción se puede aplicar a cualquier
servidor de aplicaciones JEE.
El archivo “weblogic-ejb-jar.xml” describe los elementos EJB que son exclusivos de WebLogic
Server.
Hay muchas razones para usar tanto EJB 3 como Spring. Los EJB tienen beneficios que
Spring no brinda: integración con cosas como Servlets y etiquetas JSP, mejor integración con
el contenedor para monitoreo y administración, soporte de herramientas, etc. Spring
también tiene beneficios; en particular, no necesita el contenedor, pero también obtiene más
control sobre el ciclo de vida del bean. Juntos son un buen complemento.