Download - Message Driven Bean - BENELALLAM
Message Driven Bean
MessageDriven Bean:Définition
• Message-Drivenbeans =beans accessiblesparmessaging asynchrone• NouveautéapparueavecEJB2.0,• Messaging =moyendecommunicationléger,comparéàRMI-IIOP,• Pratiquedansdenombreuxcas.
MessageDriven Bean:Casd’utilisation
UtiliserunMessageDriven Beansi:• LeBeandoitêtreexécutélorsqu’unmessageestarrivé.
• Lemessagedoitêtretraitéd’unemanièreasynchrone.
MessageDriven Bean:Motivation
• Performance• UnclientRMI-IIOPattend pendantqueleserveureffectueletraitementd'unerequête,
• Fiabilité• Lorsqu'unclientRMI-IIOPparleavecunserveur,cedernierdoitêtreentraindefonctionner.S'ilcrashe,ousileréseaucrashe,leclientestcoincé.
• Pasdebroadcasting !• RMI-IIOPlimitelesliaisons1clientvers1serveur
Messaging
• C'estcommelemail!Oucommesionavaitunetroisièmeentitéentreleclientetleserveur!
Messaging
• MessageOriented Middleware(MOM)estlenomdonnéauxmiddlewaresquisupportentlemessaging.
• Tibco Rendezvous,IBMMQSeries,BEATuxedo/Q,MicrosoftMSMQ,Talarian SmartSockets,ProgressSonicMQ,Fiorano FioranoMQ,…
• Cesproduitsfournissent:messagesavecgarantiedelivraison,toléranceauxfautes,load-balancing desdestinations,etc…
TheJavaMessageService(JMS)
• LesserveursMOMsontpourlaplupartpropriétaires:pasdeportabilitédesapplications!
• JMS=unstandardpournormaliserleséchangesentrecomposantetserveurMOM,
• UneAPIpourledéveloppeur,• UnServiceProviderInterface(SPI),pourrendreconnecterl'APIetlesserveursMOM,vialesdriversJMS
JMS:MessagingDomains• Avantdefairedumesaging,ilfautchoisirundomaine
• Domaine=typedemessaging
• Domainespossibles• Publish/Subscribe(pub/sub):nproducteurs,nconsommateurs(tv)
• PointToPoint(PTP):nproducteurs,1consommateur
JMS:lesétapes
1. Localiser ledriverJMS• lookup JNDI.Ledriverestuneconnection factory
2. Créeruneconnection JMS• obteniruneconnection àpartirdelaconnection
factory
3. Créerunesession JMS• Ils'agitd'unobjetquivaserviràrecevoiret
envoyerdesmessages.Onl'obtientàpartirdelaconnection.
4. Localiser ladestination JMS• Ils'agitducanal,delachaînetélé!Normalement,
c'estrégléparledéployeur.Onobtientladestination viaJNDI.
5. Créerunproducteur ouunconsommateur JMS• Utiliséspourécrireoulireunmessage.Onles
obtientàpartirdeladestination oudelasession.
6. Envoyer ourecevoir unmessage
JMS:lesinterfaces
JMS:exempledecode(1)
JMS:exempledecode(2)
Note : Dans 3) false = pas de transactions, AUTO_AKNOWLEDGE = inutile ici puisqu’on envoie des messages.
IntégrerJMSetlesEJB
• Pourquoicréerunnouveautyped'EJB?• Pourquoinepasavoirdéléguéletravailàunobjetspécialisé?• Pourquoinepasavoiraugmentélescaractéristiquesdessessionbeans?
• Parcequeainsionpeutbénéficierdetouslesavantagesdéjàrencontrés:cycledevie,pooling,descripteursspécialisés,codesimple…
Qu'est-cequ'unMessage-DrivenBean?
• UnEJBquipeutrecevoirdesmessages• Ilconsommedesmessagesdepuislesqueuesoutopics,envoyésparlesclientsJMS
Qu'est-cequ'unMessage-DrivenBean?
• Unclientn'accèdepasàunMDBviauneinterface,ilutilisel'APIJMS,• UnMDBn'apasd'interfaceHome,LocalHome,Remote ouLocal,• LesMDBpossèdentuneseuleméthode,faiblementtypée:onMessage()
• ElleaccepteunmessageJMS(BytesMessage,ObjectMessage,TextMessage,StreamMessage ouMapMessage)
• Pasdevérificationdetypesàlacompilation.• Utiliserinstanceof aurun-timepourconnaîtreletypedumessage.
• LesMDBn'ontpasdevaleurderetour• Ilssontdécouplésdesproducteurs demessages.
• LesMDBnerenvoientpasd'exceptionsauclient(maisaucontainer),• LesMDBsontstateless…
DévelopperunMessage-Driven Bean• LesMDBs doiventimplémenterpublic interface javax.jms.MessageListener {
public void onMessage(Message message);
}
public interface javax.ejb.MessageDrivenBean
extends EnterpriseBean {
public void ejbRemove()
throws EJBException;
public void setMessageDrivenContext(MessageDrivenContext ctx)
throws EJBException;
}
• Laclassed'implémentationdoitfourniruneméthodeejbCreate() quirenvoitvoid etquin'apasd'arguments.
DévelopperunMessage-Driven Bean
• Méthodesquidoiventêtreimplémentées• onMessage(Message)
• Invoquéeàchaqueconsommationdemessage• UnmessageparinstancedeMBD,poolingassuréparlecontainer
• setMessageDrivenContext(MessageDrivenContext)• AppeléeavantejbCreate,sertàrécupèrerlecontexte.• Necontientquedesméthodesliéesauxtransactions…
DévelopperunMessage-Driven Bean
Unexemplesimple
• UnMDBquifaitdulogging,c'estàdireaffichedesmessagesdetextesàl'écranchaquefoisqu'ilconsommeunmessage.
• Utilepourdébugger….
• Rappel:pasd'interfaces!
Laclassedubean
Laclassedubean(suite)
Question?
• Commentsait-onquellequeueouqueltopicdemessageslebeanconsomme?
• Celan'apparaîtpasdansledescripteur!
• C'estfaitexprèspourrendrelesMDBportablesetréutilisables.• L'informationsetrouvedansl’@ActivationConfigPropertyaudébutducode
Leclient(1)import javax.naming.*;
import javax.jms.*;
import java.util.*;
public class Client {
public static void main (String[] args) throws Exception {
// Initialize JNDI
Context ctx = new InitialContext(System.getProperties());
// 1: Lookup ConnectionFactory via JNDI
TopicConnectionFactory factory =
(TopicConnectionFactory)
ctx.lookup("javax.jms.TopicConnectionFactory");
// 2: Use ConnectionFactory to create JMS connection
TopicConnection connection =
factory.createTopicConnection();
Leclient(2)
// 3: Use Connection to create session
TopicSession session = connection.createTopicSession(
false, Session.AUTO_ACKNOWLEDGE);
// 4: Lookup Destination (topic) via JNDI
Topic topic = (Topic) ctx.lookup("testtopic");
// 5: Create a Message Producer
TopicPublisher publisher = session.createPublisher(topic);
// 6: Create a text message, and publish it
TextMessage msg = session.createTextMessage();
msg.setText("This is a test message.");
publisher.publish(msg);
}
}
MessageDriven Bean:Implémentation
• Considéronslacréationd’unbean quipermetd’extraireuntexteenvoyéparunclientpourqu’ilsoitutiliséparuneautreapplication.
• Pourcommencer,ilfaututiliserl’annotation@MessageDriven,enspécifiantletypedemessagequiserapriseencharge(jms/Queue)
MessageDriven Bean:Implémentation
• Parlasuiteondéfinituneclassepubliqueimplémentantl’interfaceMessageListener,quicontientlamethodeonMessage(Messagemsg)responsabledelalogiquemétier.
The JMS API Programming ModelThe basic building blocks of a JMS application consist of• Administered objects: connection factories and
destinations• Connections : A connection encapsulates a virtual
connection with a JMS provider.• Sessions : A session is a single-threaded context for
producing and consuming messages.• Message producers : A message producer is an object
that is created by a session and used for sendingmessages to a destination.
• Message consumers : message consumer is an objectthat is created by a session and used for receivingmessages sent to a destination.
• Messages : abasic formatthat is simplebuthighly flexible,allowing you tocreate messages that matchformatsused bynon-JMSapplications onheterogeneous platforms.
JMSMessagingModels
In publish-and-subscribe messaging, one producer cansend a message to many consumers through a virtualchannel called a topic.
The point-to-point messaging model allows JMS clients to send and receive messages both synchronously and asynchronously via virtual channels known as queues.
Retoursurlepackaging
• Unfichierd’archived’entreprise(EAR)• ModuleEJB(.jar)• Moduleweb(.war)• Applicationcliente(.jar)• Module‘ResourceAdapter’(.rar)• ....
• Chaquefichierd’archive(ear,war,raroujar)contientundescripteurdedéploiement(fichierxml)
Retoursurlepackaging
• Ledescripteurdedéploiementsertàdéfinirlesparamètresdedéploiementd’uneapplication(ear)oud’unmodule
• Exemples:• application.xml:déclarerl’ensembledesmodulesintégrésdansunfichier(.ear)
• ejb-jar.xml:configurerlesEJBdansunmoduled’unfichier(.jar)• web.xml:configurerlesparamètresdumoduleweb(servlets,JSP,TagLib..)d’unfichier(.war)
Structured’unfichierEAR
Racine de l’application (.ear)
META-INF Module Web(.war)
Module EJB(.jar)
Module RessourceAdapter
(.rar)
Module applicationCliente(.jar)application.xml
sun-application.xmljboss-application.xml