PDF de programación - Sesión 4: Message Driven Beans - Servicios de Mensajes con JMS

Imágen de pdf Sesión 4: Message Driven Beans - Servicios de Mensajes con JMS

Sesión 4: Message Driven Beans - Servicios de Mensajes con JMSgráfica de visualizaciones

Publicado el 22 de Enero del 2019
510 visualizaciones desde el 22 de Enero del 2019
211,8 KB
24 paginas
Creado hace 13a (23/02/2011)
Especialista Universitario Java Enterprise

Sesión 4: MessageDrivenBeans

©2010-2011 Depto. Ciencia de la Computación e IA

Especialista Universitario Java Enterprise

Puntos a tratar
• Introducción
• Reglas de Programación
• Anotaciones
• Callbacks
• Envío de Mensajes JMS desde el MDB
• Transacciones Distribuidas
• Mejores Prácticas
• Roadmap

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 2

Especialista Universitario Java Enterprise

MessageDrivenBean
• Es un oyente de mensajes que puede consumir de modo asíncrono

mensajes de una cola o de una durable subscription.
• Dichos mensajes pueden ser enviados por cualquier componente JavaEE

(cliente, otro EJB o una componente Web como un servlet).
Incluso desde una aplicación o sistema que no use tecnología JavaEE.

• Proporciona multi-threading al manejar los mensajes entrantes

mediante múltiples instancias de beansalojados en el pool del
servidor de aplicaciones.

• Todo MDB contiene el método onMessage()
• A diferencia de un MDB, un cliente JMS realiza las siguientes tareas:



• Crear un consumidor asíncrono para recibir el mensaje.

Con un MDB asociamos el destino y la factoría de conexiones durante

el despliegue vía anotación/descriptor despliegue.

• Registrar el listener de mensajes con setMessageListener

El MDB registra el listener automáticamente.

• Especificar el modo de acuse de recibo

por defecto es AUTO_ACKNOWLEDGE

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 3

Especialista Universitario Java Enterprise

Proceso MDB

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 4

Especialista Universitario Java Enterprise

Más Características…
• El MDB usa la anotación @MessageDriven

• Permite especificar las propiedades del beano de la factoría de

conexión, tales como el tipo de destino, la subscripción duradera, el
selector de mensajes, o el modo de acuse de recibo.
• El contenedor iniciaráuna transacción justo ANTES de llamar al

método onMessage() y haráun commit de esta transacción cuando
dicho método haga el return, a no ser que la transacción esté
marcada como rollback en el contexto del MDB.

• Difiere de otros EJBs, en que el MDB no tiene interfaz local o remota.

• Sólo la clase bean.
• Se parece a un StatelessSessionBean (SSB); sus instancias son short-

livedy 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...

• El contenedor tiene un pool de objetos MDB que permite que los

mensajes se procesen concurrentemente
• Puede afectar al orden en que se reciben los mensajes.

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 5

Especialista Universitario Java Enterprise

Reglas de Programación
1.

La clase MDB debe directamente (con implements) o
indirectamente (mediante anotaciones o descriptores) implementar
un interfaz de listener de mensajes.
La clase MDB debe ser concreta, ni abstracta ni final.
La clase MDB debe ser un POJO y no una subclase de otro MDB.
La clase MDB debe declararse pública.

2.
3.
4.
5. El constructor de la clase MDB no debe tener argumentos.

Si no tiene constructor, el compilador implementaráuno por defecto.
El contenedor usa ese constructor para crear instancias de MDBs.

6. No se puede definir un método finalize.






Si es necesario alguno código de limpieza, se debería definir un método
anotado con PreDestroy.

7.

Los MDBsdeben implementar los métodos de la interfaz
MessageListener y esos métodos deben ser públicos, nunca
estáticos o finales.

8. Esta prohibido lanzar javax.rmi.RemoteException o cualquier

excepción de ejecución.


Si se lanza un RuntimeException, la instancia MDB finalizará.

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 6

Especialista Universitario Java Enterprise

Ejemplo de MDB
@MessageDriven(mappedName= "jms/Queue", activationConfig= {

@ActivationConfigProperty(propertyName= "destinationType",
propertyValue= "javax.jms.Queue")

})
public class ConsumidorMDBBeanimplements MessageListener

{

System.out.println("Constructordel MDB");

public ConsumidorMDBBean() {
}
public void onMessage(Messagemessage)

{

TextMessagemsg= null;
try {

if (message instanceofTextMessage) {

msg= (TextMessage) message;
System.out.println("RecibidoMDB [" + msg.getText() + "]");
System.err.println("Elmensajeno esde tipotexto");

} else {
}
System.err.println("JMSExceptionen onMessage(): " + e.toString());
System.err.println("Exceptionen onMessage():" + t.getMessage());

} catch (JMSExceptione) {
} catch (Throwablet) {
}

}

}

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 7

Especialista Universitario Java Enterprise

@MessageDriven

@Target(TYPE)
@Retention(RUNTIME)
public @interface MessageDriven {

String name() default "";
Class messageListenerInterfacedefault Object.class;
ActivationConfigProperty[] activationConfig() default {};
String mappedName();
String description();

}
• Todos los argumentos son opcionales.
• Ejemplo mínimo:

@MessageDriven
public class GestorPeticionesCompraMDB

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 8

Especialista Universitario Java Enterprise

Implementando el Listener
• El contenedor utiliza el listener para registrar el MDB en el proveedor

de mensajes y pasar los mensajes entrantes a los métodos
implementados en el listener.

• Con anotaciones:

@MessageDriven(

name="MiGestorPeticionesCompraJMS",
messageListenerInterface="javax.jms.MessageListener")
public class GestorPeticionesCompraMDB {

• Con código:

public class GestorPeticionesCompraMDBimplements MessageListener {

• Otra opción es mediante el descriptor de despliegue, y dejar los

detalles fuera del código.

• La elección entre un modo u otro suele ser cuestión de gustos.

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans - 9

Especialista Universitario Java Enterprise

activationConfigy ActivationConfigProperty
• La propiedad activationConfig permite especificar la
configuración específica mediante un array de instancia de
ActivationConfigProperty

• Definición de ActivationConfigProperty:

public @interface ActivationConfigProperty {

String propertyName();
String propertyValue();

}

• Cada propiedad de activación es un par (nombre, valor)

• Nombres de propiedades: destinationType,

connectionFactoryJndiName, destinationName,
acknowledgeMode, subscriptionDurability,
messageSelector

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans -10

Especialista Universitario Java Enterprise

Ejemplo de ActivationConfigProperty
• Ejemplo con las propiedades más utilizadas:

@MessageDriven(

name="MiGestorPeticionesCompra",
activationConfig = {

@ActivationConfigProperty(

",

@ActivationConfigProperty(

propertyName="destinationType",
propertyValue="javax.jms.Queue"),
propertyName=“
propertyValue="jms/QueueConnectionFactory"),
propertyName="destinationName",
propertyValue="jms/PeticionesCompraQueue")

@ActivationConfigProperty(

}

)

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans -11

Especialista Universitario Java Enterprise

Otras propiedades

@ActivationConfigProperty(

propertyName="acknowledgeMode",
propertyValue="DUPS_OK_ACKNOWLEDGE")

@ActivationConfigProperty(

@ActivationConfigProperty(

propertyName="destinationType",
propertyValue="javax.jms.Topic"),
propertyName="subscriptionDurability",
propertyValue="Durable")

@ActivationConfigProperty(

propertyName="messageSelector",
propertyValue="Anyo= 2008")

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans -12

Especialista Universitario Java Enterprise

Responsabilidad del Contenedor
• Crear instancias MDBsy



configurarlas.
Inyectar recursos, incluyendo el
contexto 'message-driven'.

• Colocar las instancias en un pool

gestionado.

• Cuando llega un mensaje, sacar un

beaninactivo del pool
• el contenedor puede que tenga que

incrementar el tamaño del pool
• Ejecutar el método de listener de
mensajes (método onMessage)
onMessage, devolver al pool el bean.

• Al finalizar la ejecución del método

• Conforme sea necesario, retirar (o

destruir) beansdel pool.

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans -13

Especialista Universitario Java Enterprise

Callbacks
• PostContruct

• Se llama inmediatamente un

vez el MDB se ha creado,
iniciado y se le han
inyectado todo los recursos

• PreDestroy

• Se llama antes de quitar y
eliminar las instancias bean
del pool.

• Estos callbacks se utilizan para reservar y liberar

recursos inyectados que se usan dentro de onMessage

Servicios de Mensajes con JMS

©2010-2011 Depto. Ciencia de la Computación e IA

MessageDrivenBeans -14

Especialista Universitario Java Enterprise

Ejemplo Callbacks(I) –MDB + JDBC

@ActivationConfigProperty(propertyName= "destinationType", propertyValue= "javax.jms.Queue")

@MessageDriven(mappedName= "jms/Queue", activationConfig= {
})
public class ConsumidorMDBJDBCBeanimplements MessageListener {

System.out.println("Constructordel MDB");

private java.sql.Connectionconnection;
private DataSourcedataSource;
@Resource
private MessageDrivenContextcontext;
public ConsumidorMDBJDBCBean() {
}
@Resource(name= "jdbc/biblioteca")
public void setDataSource(DataSourcedataSource) {
}
@PostConstruct
public void initialize() {

this.dataSource= dataSource;

try {
connection = dataSource.getConnection();
} catch (SQLExceptionsqle)
  • Links de descarga
http://lwp-l.com/pdf14951

Comentarios de: Sesión 4: Message Driven Beans - Servicios de Mensajes con JMS (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad