Sunteți pe pagina 1din 29

Tehnologii Java

Curs Cristian Frasinaru


acf@infoiasi.ro

Facultatea de Informatica Universitatea Al. I. Cuza Iasi

Comunicarea prin mesaje

Tehnologii Java p.1/2

Cuprins
Introducere Arhitectura sistemelor bazate pe mesaje Componentele JMS Modele de comunicare Modelul de programare JMS API Exemplu

Tehnologii Java p.2/2

Introducere

Tehnologii Java p.3/2

Ce reprezint mesageria ? a
Mesageria = Forma de comunicare bazata pe mesaje ntre componente sau aplicaii (clieni). Caracteristici: t t asincrona loosely-coupled (spre deosebire de RMI care este tightly-coupled) clienii comunica prin intermediul unor ageni t t

Tehnologii Java p.4/2

JMS
JMS = Java Message Service API Java pentru crearea trimiterea, primirea, citirea de mesaje n mod sigur, relaxat si asincron. Scopul iniial: uniformizarea accesului la t messaging-oriented middleware (MOM) Starea actuala: integrata n arhitectura Java EE Implementari: GlassFish, JBoss, IBM Websphere, BEA WebLogic, ActiveMQ (Apache), OpenJMS (Sun), etc.

Tehnologii Java p.5/2

Arhitectura sistemelor bazate pe mesaje

Tehnologii Java p.6/2

Conceptele de baz a
Mesaj tip: comanda, transfer de date, eveniment, etc. adresare formatare, secvenializare t durata de viaa t Canal de comunicaie t Capetele comunicarii Livrare n mai muli pasi: Pipes & Filters t Rutare: MessageRouter Transformari: MessageTransformer

Tehnologii Java p.7/2

Componentele unui sistem JMS


Furnizor - sistem de mesagerie care implementeaza specicaiile Java EE t Clieni - aplicaii sau componente care produc sau t t consuma mesaje Mesaje - obiectele de transport a informaiei ntre t clieni t Administratori - obiecte cu rol administrativ precongurate n sistem ce pot utilizate de clieni: t Destinaii (destination factory) t Conexiuni (connection factory)

Tehnologii Java p.8/2

Imagine de ansamblu

Tehnologii Java p.9/2

Modele de comunicare
Point-to-Point (Queuing) Producator - queue - Consumator Un mesaj are un singur consumator Consumatorul conrma primirea mesajelor Publish/Subscribe Producator - topic - Consumator Un mesaj poate avea mai muli consumatori t

Tehnologii Java p.10/2

Modelul Point-to-Point

Tehnologii Java p.11/2

Modelul Publish/Subscribe

Tehnologii Java p.12/2

"Consumarea" mesajelor
Conceptual mesageria este asincrona = nu exista o dependena temporala ntre producerea si consumarea t unui mesaj. JMS dene te nsa urmatorii termeni legai s t de consumul unui mesaj: Consum sincron (blocant) - clientul apeleaza explicit metoda receive Consum asincron (ne-blocant) - clientul nregistreaza un message listener si dene te codul metodei s onMessage

Tehnologii Java p.13/2

Modelul de programare

Tehnologii Java p.14/2

Imagine de ansamblu

Tehnologii Java p.15/2

Obiecte administrative
Pot de unul din tipurile: ConnectionFactory DestinationFactory Sunt create uzual de administratorul sistemului prin instrumente specice serverului de aplicaii. t Sunt accesate prin JNDI
Context ctx = new InitialContext(); ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("MyConnectionFactory"); Destination myDest = (Destination) ctx.lookup("MyTopic"); Queue myQueue = (Queue) ctx.lookup("MyQueue");

Tehnologii Java p.16/2

Conexiuni
Conexiune = abstract: modul de comunicare cu furnizorul JMS concret: (poate ) socket TCP/IP legat de un serviciu de tip daemon
Connection connection = connectionFactory.createConnection(); ... connection.start(); ... connection.stop(); ... connection.close();

Tehnologii Java p.17/2

Sesiuni
Sesiune = Context pentru producerea si consumarea mesajelor ce ruleaza ntr-un r propriu de execuie. t Responsabile cu: Crearea obiectelor de tip producator, consumator, mesaj Serializarea apelurilor onMessage din cadrul obiectelor message listener t Crearea de tranzacii (unitai atomice de lucru) t
boolean transacted = false; Session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);

Tehnologii Java p.18/2

Produc tori de mesaje a


Crearea producatorului
MessageProducer MessageProducer MessageProducer MessageProducer producer producer producer anon_prod = = = = session.createProducer(dest); session.createProducer(queue); session.createProducer(topic); session.createProducer(null);

Crearea mesajului Trimiterea mesajului


producer.send(message); anon_prod.send(queue, message);

Tehnologii Java p.19/2

Consumatori de mesaje
Crearea producatorului
MessageConsumer consumer = session.createConsumer(dest); MessageConsumer consumer = session.createConsumer(queue); MessageConsumer consumer = session.createConsumer(topic);

Consumarea mesajului (cu blocare)


Message m = consumer.receive();

Message m = consumer.receive(1000); // time out after a second

Tehnologii Java p.20/2

Comunicarea prin evenimente


Obiectele de tip MessageListener ofera o modalitate neblocanta de consumarea mesajelor.
consumer.setMessageListener( new MessageListener() { public void onMessage(Message message) { // A aparut un mesaj // Cod specific de tratare a mesajului } });

Tehnologii Java p.21/2

Mesaje
Un mesaj compus din: Antet - Conine informaii necesare pentru t t identicare si rutare; acelea i cmpuri indiferent de s tipul mesajului; t Proprietai - Valori specice aplicaiilor ce pot t utilizate la ltrarea automata a mesajelor;
messageSelector: "JMSType = car AND color = blue AND weight > 2500"

Coninut t

Tehnologii Java p.22/2

Tipuri de mesaje
Stream Map Text Object Bytes
TextMessage message = session.createTextMessage(); message.setText(msg_text); producer.send(message); Message m = consumer.receive(); TextMessage message = (TextMessage) m; System.out.println(message.getText());

Tehnologii Java p.23/2

Congurar ri simple a
Controlul mecanismului de conrmare a primirii mesajelor AUTO, CLIENT, DUPS OK ACKNOWLEDGE Setarea nivelurilor de prioritate 0 9 Specicarea persistenei mesajelor t PERSISTENT, NOT PERSISTENT Specicarea duratei de viaa a mesajelor; mesajele t pot expira Crearea unor destinaii temporare t

Tehnologii Java p.24/2

Congur ri avansate a
Congurarea modelului Publisher/Subscriber subscripii non-durabile t subscripii durabile t t Folosirea tranzaciilor (unitai atomice de lucru) t commit - toate mesajele produse sunt trimise, toate mesajele consumate sunt conrmate rollback - toate mesajele produse sunt distruse, toate mesajele consumate sunt retrimise

Tehnologii Java p.25/2

Subscripii non-durabile t
Mesajele publicate n perioada n care consumatorul nu este activ sunt pierdute.

Tehnologii Java p.26/2

Subscripii durabile t
Mesajele publicate n perioada n care consumatorul nu este activ sunt memorate ntr-o lista si trimise la reactivarea acestuia.

Tehnologii Java p.27/2

Dependency Injection
public class MyServlet extends HttpServlet { @Resource(mappedName="jms/ConnectionFactory") private static ConnectionFactory connectionFactory; @Resource(mappedName="jms/Queue") private static Queue queue; @Resource(mappedName="jms/Topic") private static Topic topic; ... }

Tehnologii Java p.28/2

S-ar putea să vă placă și