Vous n'êtes pas connecté. Connexion
|
|
TP4 : Utilisation de JMS et de Message Driven BeansDe $1
Faisons marcher l'exemple du coursRepartez du TP3. Dans la liste des EJBs, ajoutez un Message Driven Bean. Vous suivrez les étapes ci-dessous : 1) Ajouter un message driven bean au projet EJB (celui avec le grain de café) 2) Configurer le bean. On lui donne un nom puis on indique le nom de la Queue de messages (ici "jms/logginMessages"). On indique aussi le type du gestionnaire de messages (Queue). Le Bean est généré puis ajouté au projet. Le source doit ressembler à cela : package tp2; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; /** * * @author michel */ @MessageDriven(mappedName = "jms/loggingMessages", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class MDBduCours implements MessageListener { public MDBduCours() { } public void onMessage(Message message) { } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package tp2; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; /** * * @author michel */ @MessageDriven(mappedName = "jms/loggingMessages", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class MDBduCours implements MessageListener { public MDBduCours() { } public void onMessage(Message message) { if (message instanceof TextMessage) { TextMessage tm = (TextMessage) message; try { String text = tm.getText(); System.out.println("Received new message :" + text); } catch (JMSException e) { } } } } Notez que le nom de la destination est "jms/NewMessage", si vous allez voir dans la console d'administration du serveur d'application après avoir déployé le projet, vous trouverez sous jms/resources sa définition. C'est la même chose que pour les sources de données : on peut déployer de nouveaux Topic ou Queues de messages à la volée. Leur définition est ajoutée (dans le cas de Glassfish) dans le descripteur propriétaire sun-resources.xml : Vous pouvez jeter un oeil à ce fichier, vous retrouverez la source de données du TP3 ainsi que la définition de la Queue de messages "jms/loggingMessages". Créez une servlet de test pour ce bean
Avec netbeans, faites dans le source de la servlet bouton de droite : Puis dans le dialogue suivant, indiquez le nom du Message Driven Bean à qui vous voulez envoyer un message : Etudiez le code généré. Essayez de comprendre ce qu'il fait. En particulier, notez que les lignes : Correspondent aux 4 premières étapes indiquées en cours, que l'on pourrait écrire (en utilisant explicitement JMS) comme ceci : // 1 Récupération de la factory JMS InitialContext ctx = new InitialContext(); opicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("jms/NewMessageFactory"); // 2 Use connection factory to create a JMS connection TopicConnection connection = factory.createTopicConnection(); //3 Use connection to create a session TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); // 4 Lookup destination Topic topic = (Topic) ctx.lookup("jms/NewMessage");
Evidemment, avec les annotations de code c'est plus simple ! Des méthodes utilitaires sont également générées, en particulier la méthode sendJMSMessageToNewMessage qui prend un objet en paramètre (messageData). Regardez ce qu'elle fait... Elle nous mache le travail. Sauf que par défaut elle suppose que le message est un textMessage. Pour la question suivante du TP, vous utilisez un ObjectMessage, il faudra donc légèrement modifier la ligne de création du message. Regardez également la méthode processRequest. Elle est finalement très concise, pour envoyer un message texte on se contente d'une ligne de code : Compilez, déployez, testez la servlet de test et vérifiez dans la console du serveur que le message est bien arrivé ! Allez, au boulot ! Faisons une vraie application !
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. 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). |
Powered by MindTouch Deki Open Source Edition v.8.08 |