TP4 EJB : Utilisation de JMS et de Message Driven Beans

De $1

Version de 17:00, 24 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Faisons marcher l'exemple du cours

Repartez du TP2. Dans la liste des EJBs, ajoutez un Message Driven Bean.
Dans la méthode onMessage(), mettez le code de l'exemple du cours. Ce Bean doit ressembler à celui-ci une fois terminé :

import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author lm
 */
@MessageDriven(mappedName = "jms/NewMessage", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "clientId", propertyValue = "NewMessageBean"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "NewMessageBean")
    })
public class NewMessageBean implements MessageListener {
    @PersistenceContext
    private EntityManager em;
    
    public NewMessageBean() {
    }

    
    public void onMessage(Message msg) {
        if(msg instanceof TextMessage) {            TextMessage tm = (TextMessage) msg;
           try {  
              String text = tm.getText();
              System.out.println("Received new message :"  + text);
            } catch (JMSException e) {
              e.printStackTrace();
            }       
        }
    }

    public void persist(Object object) {
        em.persist(object);
    }
    
}

Notez que le nom de la destination est "jms/NewMessage", si vous allez voir dans la console d'administration du serveur d'application, vous trouverez sous jms/resources sa définition. C'est la même chose que pour les sources de données.

Créez une servlet de test pour ce bean


Vous allez ajouter au projet une servlet de test. Cette servlet enverra lors de son invocation un message texte à l'EJB précédente. Vous adapterez le code du client de l'exemple du cours. Attention de changer le nom de la destination pour jmsNewMessage.

Avec netbeans, faites dans le source de la servlet bouton de droite :

sendjms.jpg

Puis dans le dialogue suivant, indiquez le nom du Message Driven Bean à qui vous voulez envoyer un message :

sendjms2.jpg

Allez, au boulot ! Faisons une vraie application !


Vous allez maintenant modifier le TP2. Aux fonctionnalités de virement, de création, de modification de solde, vous allez ajouter la notion de "opération bancaire".

Une opération bancaire est une "trace" d'une opération qui a été effectuée sur un compte particulier. Lorsque vous consultez votre compte bancaire sur l'application web de votre banque et que vous examinez les opérations sur un compte, chaque ligne affichée est "opération bancaire".

 En effet, lorsque vous émettez un chèque ou lorsque vous achetez des produits avec votre carte bleue, la banque est contactée et une ligne est ajoutée dans la table des opérations bancaires.

Pour le moment nous n'allons pas utiliser de "relations" au sens des "relations entre tables". On laissera la table des opérations déconnectée de la table des comptes.

 Vous allez juste créer un entity bean OperationBancaire qui permettra d'enregistrer dans une BD des opérations. La table sera créée à partir de la classe du Bean, comme pour le TP 2. Une opération a un numéro (auto-généré), une date, un descriptif (magasin où on a acheté), un type (chèque ou CB ou virement par exemple) et un montant. Le client de ce bean sera un Message Driven Bean.

Sa méthode onMessage() récupère un message de type ObjectMessage qui est en fait une instance d'un objet OperationBancaire et utilise un entity manager pour ajouter les données dans la base. Vous complèterez le bean du TP2 pour qu'il puisse fournir des fonctionalités comme afficher le détail des transactions d'un compte, avec pour paramètre le numéro de compte par exemple. Bien entendu, pour complèter le tableau, vous écrirez les jsps et servlets qu'il manque, clients du Message Driven Bean et du bean gestionnaire de comptes.

Chaque fois qu'une création de compte, qu'un virement, qu'une modification sur un compte est effectuée, on emet un message que le Message Driven Bean traitera (il écrira une ligne de plus dans la table des opérations bancaires).