Département Télécommunications, Services & Usages
Étude d’un Middleware
Philippe ISORCE
Introduction
Les MOM (Message Oriented Middleware) permettent l’intégration d’applications hétérogènes
JMS normalise l’accès des programmes Java aux middlewares à messages (MQSeries, MSMQ, TIBCO, SonicMQ,…)
JORAM implémente JMS 1.1 et les spécifications du serveur de messagerie
La plate-forme MT Échange met en œuvre le MOM, et un Réseau d’Échange de Données (RED)
Département Télécommunications, Services & Usages 3
Message Oriented Middleware (MOM)
Modèle de communication entre logiciels
Intégration de modules hétérogènes distribués Indépendance (asynchronisme)Fiabilité et garantie de délivrance
RPC
MOM
Principe de base du MOM
Système de messagerie d’entreprise Files de messages persistantes
Échange asynchrone de messages (stockage des messages si nécessaire)
Reprise après une panne du MOM
Un émetteur remet son message et peut continuer son exécution sans se soucier de l’état du destinataire
Département Télécommunications, Services & Usages 5
Caractéristiques du MOM
Modes de communication
Point-à-point (PTP): émetteur, destinataire et file (queue)
Publication/Souscription (Pub/Sub): éditeur, abonné et rubrique (topic)
Modèle de programmation
Réception explicite / implicite
Messages
Messages dotés d’attributs et de propriétés Priorités, garantie de délivrance
Utilisation du MOM
6 Étapes
Initialisation : recherche d’une fabrique, d’une destination, création d’une connexion, d’une session Production / Consommation : création d’un
producteur ou consommateur, du message, envoi ou réception
Département Télécommunications, Services & Usages 7
L’interface Java Message Service (JMS)
API Java d’accès uniforme aux systèmes de messagerie d’entreprise
Provider X JVM Client
Client
Client
MQ X MQ X MQ X MQ X
JMS Client
Provider X JVM Client
JMS
Composants d’une application JMS
Fournisseur JMS (MOM)
Modèle P2P, Pub/sub Fonctions administration
Clients JMS
Producteur, consommateur
Objets administrés
Connexions et destinations
Messages
Département Télécommunications, Services & Usages 9
Anatomie d’un message JMS
Charge utile Message TextMessage ObjectMessage BytesMessage
… En-têtes JMSDestination JMSDeliveryMode JMSMessageID JMSTimestamp JMSExpiration JMSPriority JMSType
…
Entêtes
Automatiques Paramétrables
Propriétés
Spécifiques à l’application
Définies par JMS ou par le MOM
Charge Utile
Sélecteur de message Type de message
Propriétés JMSXUserID JMSXAppID JMSXState
…
Mode Point-à-Point (PTP) en action
Emetteur Destinataire
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) messaging.lookup("…");
Queue queue = (Queue) messaging.lookup("…");
QueueConnection connection = connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(…);
QueueSender sender = session.createSender(queue);
String selector = new String("(name = ‘MT System') or (name = ‘mobiliTime'))");
QueueReceiver receiver = session.createReceiver(queue, selector);
Queue
QueueConnectionFactory
QueueSession QueueConnection
QueueSession QueueConnection
+
QueueSender
+
QueueReceiver
TextMessage msg = session.createTextMessage();
msg.setText("…");
sender.send(msg);
TextMessage msg = (TextMessage) receiver.receive();
send receive
Département Télécommunications, Services & Usages 11
Publication/Abonnement (Pub/Sub)
Éditeur Abonné
Topic
TopicConnectionFactory
A B
x y
TopicConnectionFactory connectionFactory = (TopicConnectionFactory) messaging.lookup("…");
Topic topic = (Topic) messaging.lookup("/A/x");
TopicConnection connection = connectionFactory.createTopicConnection();
TopicSession session = connection.createTopicSession(false, Session.CLIENT_ACKNOWLEDGE);
TopicPublisher publisher = session.createPublisher(topic);
TopicSubscriber subscriber = session.createSubscriber(topic);
Subscriber.setMessageListener(listener);
TopicSession TopicConnection
TopicSession TopicConnection
+
TopicPublisher publish
TopicSubscriber +
Listener onMessage
void onMessage(Message msg) throws JMSException { // unpack and handle the message
msg.acknowledge();
… }
publisher.publish(msg);
Arbre et Grappe de Rubriques
Une rubrique (Topic) peut être hiérarchisée ou groupée
Une hiérarchie ou une grappe de rubriques (Topic Tree, Clustered Topic) peut être distribuée sur plusieurs serveurs JMS
Département Télécommunications, Services & Usages 13
Modèles de Middleware
Centralisé (Hub, Spoke)
Distribué (Bus)
Partitionné
(Snowflake)
JORAM
JORAM – MOM Distribué
Appli. AAppli. BAppli. C Appli. DAppli. E
Appli. F
Une vision pour les applications d’un unique MOM
Département Télécommunications, Services & Usages 15
JORAM – Serveur d’agents
Bus logiciel à base d’agents communicants
Agents = objets réactifs de type Proxy
Persistants : fonction «store and forward »
Légers : infrastructure d’exécution partagée au sein d’un Serveur d’Agents
Modèle événement / réaction asynchrone
Événement : changement d’état significatif du système auquel un ou plusieurs agents réagissent
Événement Notification
Réaction fonction dans la classe Agent
Une architecture distribuée
Infrastructure basée sur un bus à messages
Acheminement des notifications Exécution de la réaction du destinataire
Distribution : forte interconnexion des bus locaux
Département Télécommunications, Services & Usages 17
Les propriétés de la plate-forme
Persistance
Sauvegarde des agents et notifications
Atomicité
Cohérence garantie par un moniteur transactionnel
Persistance + Atomicité = Fiabilité
Une notification est délivrée une et une seule fois
Ordonnancement causal
Les notification sont délivrées selon un ordre causal
B
C A
JORAM et JMS
JORAM est l’interface JMS du MOM
Les queueset topicssont des agents
Les messages sont encapsulés dans des notifications
Délivrance asynchrone
Garantie de délivrance
Reprise après panne
Apports de l’infrastructure à agents
Architecture totalement distribuée Scalabilité
Département Télécommunications, Services & Usages 19
JMS via le MOM JORAM
Clients JMS
QueueSender
QueueSession
QueueConnection
queue
Client 1Client 1Client 1Client 1
QueueReceiver QueueSession Client 2Client 2Client 2Client 2
QueueConnection
Connexion TCP
MOM JORAM
Message JMS
Message JMS
Connexion TCP
Notification
Notification Agent Proxy
Agent ProxyAgent Proxy Agent Proxy
Agent Proxy Agent Proxy Agent Proxy Agent Proxy
Agent Queue Agent QueueAgent Queue Agent Queue
JORAM - Communication Pub/Sub
Département Télécommunications, Services & Usages 21
JORAM – Bus à messages distribué
Intégration dans JOnAS
JORAM implémente la partie ASF (Application Server Facilities) de la spécification JMS 1.1
Intégration de JORAM en tant que ressource dans un environnement transactionnel distribué tel qu’un serveur EJB
Envoi et réception de messages dans des transactions gérées par le conteneur EJB de JOnAS
Réception asynchrone via les « Message-Driven Beans »
Département Télécommunications, Services & Usages 23
Administration avec JOnAS
Points forts de JORAM
Architecture distribuée
Facilité de mise en oeuvre Passage à grande échelle
Implémentation complète des « Application Server
Emetteur
Serveur ServeurServeur Serveur 2222 Serveur
ServeurServeur Serveur 1111
Serveur Serveur Serveur Serveur 0000 QueueConnectionFactory QueueConnectionFactoryQueueConnectionFactory QueueConnectionFactory
Queue Queue Queue Queue
QueueConnectionFactory QueueConnectionFactory QueueConnectionFactory QueueConnectionFactory
Récepteur
Département Télécommunications, Services & Usages 25
Architecture de MT Echange
Service BD package en Java (CERTU.storage.DB)
Manager package en JMS (com.mobilitime.mt_echange)
JMSServer package en JMS (com.mobilitime.mt_echange.jms) ChouetteManager
package en JMS (com.mobilitime.chouette)
DServiceManager package en Java (net.dryade.manager)
JORAMManager package en JMS (com.mobilitime.mt_echange.joram)
SimpleDAO package en Java (com.mobilitime.chouette)
Configuration des Services
Base de données
Files de Messages Pilotes de
Messages Routeurs
Architecture de MT Echange
Département Télécommunications, Services & Usages 27
Le MOM au sein de la plate-forme J2EE
Servlets JSPs
EJBs WEB Container
Client Container
JOnAS Application Server Browser
Browser Browser Browser
Java Application
JDBC JORAM
JTA JCA JAAS JavaMail
…
http
rmi
rmi html
public static void
main(…) { EJB Container
JAAS LoginModules &
CallbackHandlers JAAS LoginModules
Method permissions Authentification
AuthentificationAuthentification Authentification
Authorization Authorization Authorization Authorization Security Ctx propagation
Security Ctx
propagation DB
File
LDAP
jonas-realm.xml
Users/pwd/role
Une Finalité du MOM
Services de diffusion
Implémentation rapide des accès aux services Indépendance de la localisation des services Diffusion multi-supports (Wap, PDA, Vocal, i-
Mode,…)
Département Télécommunications, Services & Usages 29