Jms Part 4

Concludiamo questo capitolo sul sistema di messaggistica JMS, parlando dei Message Driven Bean.

Un Message Driven Bean, (abbreviato MDB) è semplicemente una classe gestita da un container, che consuma messaggi accodati su una coda o un topic.

Teniamo a mente che essendo l’MDB gestito da un container, può avere diverse istanze replicate che consumano i vari messaggi accodati e scatenano delle callback che possono entrare in concorrenza l’una con l’altra, quindi deve essere lo sviluppatore a gestire ciò, ad esempio affidandosi ad un DBMS che dia determinate garanzie nel caso di transazioni concorrenti.

Un esempio classico di utilizzo di un MDB è un log appender, cioè un bean che riceve dei logs da altri componenti applicativi, e li serializza su un DB,


@MessageDriven(
name="DBLogAppender",
activationConfig=
{
     @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
     @ActivationConfigProperty(propertyName="destination", propertyValue="queue/MyQueue")
      }
)

public class LogConsumer implements MessageListener{
     private static Logger logger = Logger.getLogger("DBLogAppender");
     public void onMessage(Message arg0) {
     logger.info(arg0);
}

Notiamo come abbiamo dovuto inserire delle chiavi nome-valore dentro l’annotation @MessageDriven (che informa il container sul fatto che tale classe debba essere gestita come un MDB). Tali ActivationConfigProperty, specificano il tipo di destination (Queue) e il nome  JNDI, della coda dalla quale riceviamo i messaggi.

In questo caso, ad esmpio, uso un Application Server che è JBoss AS 5.1.0.GA, per registrare una coda su JNDI dobbiamo editare il file deploy/messaging/destinations-service.xml all’interno del path del nostro server di default, e inserire un mbean come segue:


<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.messaging.destination:service=Queue,name=MyQueue"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">
jboss.messaging:service=ServerPeer
</depends>
<depends>jboss.messaging:service=PostOffice</depends>
<attribute name="JNDIName">queue/MyQueue</attribute>
<attribute name="RedeliveryDelay">10000</attribute>
<attribute name="MaxDeliveryAttempts">3</attribute>
</mbean>

E in esso specifichiamo tra i vari parametri anche il JNDI name.

Nella logica applicativa della callback onMessage, creiamo un logger, che agganciamo tramite il nome logico “DBLogAppender”, alla classe stessa del nostro MDB. Tale logger è configurato come Log4j Appender, cioè manda ad una struttura di destinazione, i log ricevuti in un formato log4j compliant.

Immagini e codesnippets gentilmente concessi dal prof. Bellavista ed estratti dalle slides inerenti al corso di Sistemi Distribuiti M di Ingegneria Informatica, Università di Bologna, tutti i diritti riservati

1 Responses to Jms Part 4

  1. Redina ha detto:

    Congratulations.This information is very useful. Great job!

Lascia un commento