mon rapport
cours EJB/J2EE Copyright Michel Buffa 24/1 1/2011 Message-Driven Beans Nouveauté apparue avec EJB 2. 0, Messaging = moyen comparé à RMI-IIOP, p g Pratique dans de nombreux cas, Message-Driven beans – beans accessibles par messaging asynchrone. Michel Buffa (buffa@unice. fr), UNSA 2011 modifié par Richard Grin (version 1 21/11/11) Message-Driven Beans : motivation Performance méthodes asynchrones Exemple @Asynchronous public Future payer(facture facture) throws PaiementException { retourne le statut du paiement sous la forme if (SessionContext. sCancelIed()) { d’une String // la requête a été annulée // Effectuer le paiement The Java Message Service OMS) Les seweurs MOM sont pour la plupart propriétaires : pas de portabilité des applications ! MS = un standard pour normaliser les échanges entre composant et serveur MOM, 2 destination ou de la session. Envoyer ou recevoir un message JMS : les interfaces 2 JMS : exemple de code (1) 24/1 1/201 1 JMS : exemple de code (2) Note : Dans 3) false = pas de transactions, AUTO AKNOWLEDGE ici puisqu’on envoie des messages.
Intégrer JMS et les E] B inutile Pourquoi créer un nouveau type d’EJB ? Pourquoi ne pas avoir délégué le travail à un objet spécialisé ? Pourquoi ne pas avoir augmenté les caractéristiques des session beans ? 3 n’ont pas de valeur de retour Ils sont découplés des producteurs de messages. Durable – reçoit tous les messages, même si l’abonné est inactif, Dans ce cas, le message est rendu persistant et sera délivré lorsque l’abonné sera de nouveau actif. û Nondurable = messages perdus lorsque abonné inactif. Qu’est-ce qu’un Message-Driven Bean ? Développer un Message-Driven Bean Le consommateur (celui qui peut les détruire) des messages est en général le Container Cest lui qui choisit d’être durable ou non-durable, Sil est durable, les messages résistent au crash du serveur d’application. 4 à l’écran chaque fois qu’il consomme un message. La classe du bean Utile pour débugger.. Rappel : pas d’interfaces ! 4 Cours EJB/J2EE La classe du bean (suite) Question ? Comment sait-on quelle queue ou quel topic de messages le bean consomme ?
Le client (1) Cela n’apparaît pas dans le descripteur ! C’est fait exprès pour rend S dans deux transactions séparées… es MD3 ne reçoivent pas les informations de sécurité du producteur avec le message. On ne peut pas effectuer les opérations classiques de sécurité sur les EJB. Load-Balancing, Modèle idéal : les messages sont dans une queue et ce sont les MDB qui consomment, d’où qu’ils proviennent. LI Comparer avec les appels RMI-IIOP pour les session et entity beans, ou on ne peut que faire des statistiques.. Cours EJB/PEE Concepts avancés Consommation dupliquée dans les rchitectures en clusters : utiliser une queue au lieu d’un topic si on veut que le message ne soit consommé qu’une fois ! Chaque container est un consommateur ! Pièges ! Ordre des messaees throw a system exception here or private MessageDrivenContext ctx; h’ manually force a rollback of the transaction. ctx. setRollbackOnIy(); public void setMessageDrivenContext(MessageDrivenContext ctx) this. ctx = ctx; catch (Exception e) { e. printStackTrace(); public void ejbCreate() {} public void ejbRemove() O 6 MDB empoisonné ! Solutions