corso di sistemi distribuiti ls java messaging service...
TRANSCRIPT
Sistemi Distribuiti LS – Cenni su JMS 1
Java Java MessagingMessaging ServiceService
Università di BolognaCdS Laurea Specialistica in Ingegneria Informatica
III Ciclo - A.A. 2008/2009
Corso di Sistemi Distribuiti LSJava Messaging Service (JMS): panoramica e alcuni richiami
Docente: Paolo [email protected]
http://lia.deis.unibo.it/Courses/sd0809-info/
http://lia.deis.unibo.it/Staff/PaoloBellavista/
Sistemi Distribuiti LS – Cenni su JMS 2
PerchPerchéé UtilizzareUtilizzareServiziServizi didi Messaging?Messaging?
Comunicazione disaccoppiata (o loosely coupled)
Comunicazione asincrona
Messaggi come strumento principale dicomunicazione fra applicazioni (modello a scambio di messaggi)
È il software di supporto allo scambio di messaggi a fornirele funzionalità di base necessarie
Message Oriented Middleware (MOM), Messaging system, Messaging server, Messaging provider, JMS provider
Sistemi Distribuiti LS – Cenni su JMS 3
Supporto a due modelli di messagingPoint-to-pointPublish/Subscribe
Affidabilità (in che senso?)
Operazioni con logica transazionale
Messaging distribuito, ovviamente (che cosa significa?)
Sicurezza
CaratteristicheCaratteristiche UsualiUsualiper i per i ServiziServizi didi MessagingMessaging
Alcuni sistemi di messaging supportano:Consegna con qualità (garanzie/indicazioni di real-time)Transazioni sicureAuditing, metering, load balancing, …
Sistemi Distribuiti LS – Cenni su JMS 4
ModelliModelli didi MessagingMessaging
Point-to-PointUn messaggio è consumato da un singoloricevente
Utilizzato quando ogni messaggio prodotto deveessere processato con successo da un singoloconsumatore
Publish/SubscribeUn messaggio consumato da riceventi multipliAd esempio, una applicazione di bacheca per richieste di lavoro. Creazione di un nuovo topic (argomento) di nome “new hire”; diverse applicazioni possono sottoscrivere(subscribe/abbonarsi) il proprio interesse al topic “new hire”
Sistemi Distribuiti LS – Cenni su JMS 5
PointPoint--toto--PointPoint
Un messaggio è consumato da un singolo riceventeCi possono essere produttori multipli, ovviamente
La “destinazione" di un messaggio è una coda con nome (named queue)FIFO (per lo stesso livello di priorità)Produttori inviano messaggi a named queue specificando un livello di priorità desiderato
QueueQueueClient
Senders SendsConsumes
Acknowledges
Client Receiver
Receives messages on Receives messages on the queuethe queue
Posts messages to the Posts messages to the queuequeue
Sistemi Distribuiti LS – Cenni su JMS 6
Publish/Subscribe (Pub/Sub)Publish/Subscribe (Pub/Sub)
ClientSender Sends
Consumes
Acknowledges
Client Receiver
Client Publisher Publishes
Delivers
Subscribes
Topic
SubscribesClient
subscriber
Delivers
Client subscriber
Client Publisher Topic
Client subscriber
Client subscriber
Publishes
Subscribes
Delivers
Subscribes
Subject of Subject of communicationcommunication
Available to registered Available to registered participantsparticipants
DeliversPosts messages to the
topic
Receives messages on the topic
Un messaggio consumato da riceventi multipli
La “destinazione" di un messagggio è un argomento con nome (named topic)
Produttori pubblicano su un topic
Consumatori si “abbonano” a un topic
Sistemi Distribuiti LS – Cenni su JMS 7
AffidabilitAffidabilitàà dellodelloScambioScambio didi MessaggiMessaggi
Alcune garanzie nella consegna dei messaggiGradi differenti di affidabilità (reliability) sono possibiliProduttore può specificare diversi livelli direliabilityAffidabilità più elevata va tipicamente di pari passocon minore throughput
Di solito i supporti ai sistemi di messaging utilizzanostorage persistente per preservare i messaggi
Sistemi Distribuiti LS – Cenni su JMS 8
OperazioniOperazioni sui sui MessaggiMessaggicon con ProprietProprietàà TransazionaliTransazionali
Produzione transazionaleProduttore può raggruppare una serie di messaggiin un’unica transazioneO tutti i messaggi sono accodati con successo o nessuno
Consumo transazionaleConsumatore riceve un gruppo di messaggi come serie di oggetti con proprietà transazionaleFino a che tutti i messaggi non sono staticonsegnati e ricevuti con successo, i messaggirimangono mantenuti permanentemente nellaloro queue o topic
Sistemi Distribuiti LS – Cenni su JMS 9
Scope Scope delladellaTransazionalitTransazionalitàà
Scope client-to-messaging systemLe proprietà di transazionalità riguardanol’interazione fra ogni cliente e il sistema dimessagingJMS supporta questo tipo di scope
Scope client-to-clientLe proprietà di transazionalità riguardanol’insieme delle applicazioni produttore-consumatore per quel gruppo di messaggiNon supportato da JMS
Sistemi Distribuiti LS – Cenni su JMS 10
Application 1 Queue Application 2
Messaging system
Application 1 Queue Application 2
Messaging system
Scope Scope delladellaTransazionalitTransazionalitàà
client-to-messaging system
client-to-client
Sistemi Distribuiti LS – Cenni su JMS 11
OvviamenteOvviamente, , ilil sistemasistemadidi messaging messaging èè distribuitodistribuito
Sistemi di enterprise messaging possono realizzareuna infrastruttura in cui i messaggi sonoscambiati fra server nel distribuito
Si parla in questo caso di “message channel”
Application 1
Application 2
message
Queue
Queue
Messaging server 2
Messaging server 1
Message channel
message
Sistemi Distribuiti LS – Cenni su JMS 12
SupportoSupporto allaalla SicurezzaSicurezza
AutenticazioneI sistemi di messaging richiedono usualmente aiclienti di presentare certificati digitali con signature
Confidenzialità dei messaggiUsualmente encryption dei messaggi
Integrità dei messaggiUsualmente integrità dei dati tramite digest deimessaggi
Sicurezza è gestita in modo dipendente dalvendor del sistema di messaging
Sistemi Distribuiti LS – Cenni su JMS 13
PerchPerchéé usareusaresistemisistemi didi messaging? messaging?
Indipendenza dalla piattaformaIndipendenza dalla locazione di reteAppropriato per lavorare in ambienti eterogenei
Anonimità– Who?– Where?– When?
Fortemente diverso rispetto a sistemi basati su RPC– CORBA– RMI
non importano
disaccoppiamento nello spazio e nel tempo
Sistemi Distribuiti LS – Cenni su JMS 14
ScalabilitàCapacità di gestire un numero elevato di clienti
Senza cambiamenti nella logica applicativaSenza cambiamenti nell’architetturaSenza (grosso) degrado nello throughput di sistema
Si tendono a incrementare le capacità hardware del sistema di messaging se si desidera una maggiorescalabilità complessiva
Robustezzaconsumatori possono avere un faultproduttori possono avere un fault rete può avere un fault
Senza problemi (almeno per un po’ di tempo…) per ilsistema di messaging
PerchPerchéé sistemisistemi didi messaging?messaging?
Sistemi Distribuiti LS – Cenni su JMS 15
EsempiEsempi didiApplicazioniApplicazioni didi MessagingMessaging
Transazioni commerciali che usano carte di creditoReport con previsioni del tempoWorkflowGestione di dispositivi di reteGestione di supply chainCustomer care…
Sistemi Distribuiti LS – Cenni su JMS 16
JMSJMS
JMS come insieme di interfacce Java (e associata definizionedi semantica) che specificano come un cliente JMS possaaccedere alle funzionalità di un sistema di messaging genericoSupporto alla produzione, distribuzione e consegna dimessaggiSupporto a diverse semantiche per message delivery
Sincrona/asincrona, con proprietà transazionali, garantita, durevole
Supporto sia a modello Point-to-Point (reliable queue)che Publish/Subscribe
Selettori di messaggio lato ricevente5 tipologie di messaggi possibili
Sistemi Distribuiti LS – Cenni su JMS 17
ObiettiviObiettivi didi Design Design didi JMSJMS
JMS è parte della piattaforma J2EE. Obiettivi:Consistenza con le API dei sistemi di messaging esistentiIndipendenza dal vendor del sistema di messaging Copertura della maggior parte delle funzionalitàcomuni nei sistemi di messagingPromuovere la tecnologia Java
Java™ ApplicationJava™ Application
JMS APIJMS API
JMS Provider
JMS Provider
IBMMQSeries
IBMMQSeries
JMS Provider
JMS Provider
ProgressSonicMqProgressSonicMq
JMS Provider
JMS Provider
FioranoFiorano
JMS Provider
JMS Provider
JMS Provider
JMS Provider
BEABEA SUN MQSUN MQ
Sistemi Distribuiti LS – Cenni su JMS 18
ComponentiComponenti Architetturali Architetturali didi JMSJMS
Clienti JMS e non-JMSMessaggiProvider JMS (sistema di messaging)Oggetti amministrati tramite JNDI
DestinationConnectionFactory
JMS Application(JMS Client)
JMS provider(vendor specific)
JMS API(vendor neutral)
Messaging service
JMS Application(JMS Client)
JMS provider(vendor specific)
JMS API(vendor neutral)
Sistemi Distribuiti LS – Cenni su JMS 19
Domini JMS Domini JMS ((StiliStili didi Messaging)Messaging)
Point-to-Pointi messaggi in una queue possono essere persistenti o non persistenti
Pub/SubNon durevoli (i messaggi sono disponibili solo durantel’intervallo di tempo in cui il ricevente è attivo; se il ricevente non èconnesso, la semantica è di perdere ogni messaggio prodottoin sua assenza)
Durevole (i messaggi sono mantenuti dal sistema, che fa le veci dei riceventi non connessi al tempo della produzione deimessaggi)
Sistemi Distribuiti LS – Cenni su JMS 20
MessaggiMessaggi JMSJMS
Messaggi come modalità di comunicazionedisaccoppiata fra le applicazioniI veri formati che attualmente sono utilizzati per l’encoding dei messaggi sono fortemente dipendentidal provider del sistema di messaging
Un sistema di messaging può interoperarecompletamente solo al suo interno
JMS fornisce quindi solo un modello astratto e unificato per la rappresentazione interoperabile deimessaggi attraverso le sue interfacce
MessageHeader
Properties
Body
Sistemi Distribuiti LS – Cenni su JMS 21
Message Header + Message Header + ProprietProprietàà
Utilizzato per l’identificazione del messaggio e il suoroutingInclude la destination e
modalità di consegna (persistente, non persistente), timestamp, priorità, campo ReplyTo
Elenco delle proprietà: JMSDestination, JMSDeliveryMode(persistente o no), JMSMessageID, JMSTimeStamp, JMSRedelivered, JMSExpiration, JMSPriority, JMSCorrelationID, JMSReplyTo (destinazione fornita dal produttore, dove inviare la risposta), JMSType (tipo del corpo del messaggio)
Proprietà dei messaggi (coppie nome/valore) possono essere: campi application-specific, campi dipendenti da e specifici di un particolare sistema di messaging, campi opzionali
Sistemi Distribuiti LS – Cenni su JMS 22
CorpoCorpo del del MessaggioMessaggio(Message Body)(Message Body)
Mantiene, ovviamente, il contenuto del messaggioSupporto per diversi tipi di contenuto, ogni tipodefinito da una interfaccia:
StreamMessage, MapMessage, TextMessage, ObjectMessage, BytesMessage
Ad esempio:StreamMessage contiene valori primitivi e supporta letturasequenzialeMapMessage contiene coppie nome/valore e supportalettura sequenziale o by nameBytesMessage contiene byte “non interpretati” e vieneutilizzato di solito per fare match con formati preesistenti
Sistemi Distribuiti LS – Cenni su JMS 23
SempliciSemplici EsempiEsempididi CreazioneCreazione didi MessaggiMessaggi
Per creare un semplice TextMessage:TextMessage message =
session.createTextMessage();
message.setText("greetings");
Per creare un semplice ObjectMessage:
ObjectMessage message =session.createObjectMessage();
message.setObject(myObject);
NOTA: myObject deve implementarejava.io.Serializable
Sistemi Distribuiti LS – Cenni su JMS 24
InterfacciaInterfaccia DestinationDestination
Rappresenta l’astrazione di un topic o diuna queue (non di un ricevitore di messaggi!)
Interfacce figlie per Queue e Topic
Destination(from jms)
<<Interf ace>>
Topic
getTopicName() : StringtoString() : String
(from jms)
<<Interf ace>> Queue
getQueueName() : StringtoString() : String
(from jms)
<<Interf ace>>
Sistemi Distribuiti LS – Cenni su JMS 25
InterfacciaInterfaccia ConnectionFactoryConnectionFactory
Classe factory per creare una connessioneprovider-specific verso il server JMSSimile al gestore di driver (java.sql.DriverManager) in JDBC, per chi se lo ricorda…
Interfacce figlie per QueueConnectionFactory e TopicConnectionFactory
ConnectionFactory(from jms)
<<Interface>>
QueueConnectionFactory
createQueueConnection()createQueueConnection()
(from jms)
<<Interf ace>>TopicConnectionFactory
createTopicConnection()createTopicConnection()
(from jms)
<<Interface>>
Sistemi Distribuiti LS – Cenni su JMS 26
InterfacciaInterfaccia ConnectionConnection
Astrazione che rappresenta un singolo canale dicomunicazione verso il provider JMSConnessione viene creata da un oggetto ConnectionFactoryConnessione dovrebbe essere chiusa quando si è terminato diutilizzare la risorsa
QueueConnection
createQueueSession()createConnectionConsumer()
(f rom jms)
<<Interface>>TopicConnection
createTopicSession()createConnectionConsumer()createDurableConnectionConsumer()
(f rom jms)
<<Interface>>
Connection
getClientID()setClientID()getMetaData()getExceptionListener()setExceptionListener()start()stop()close()
(f rom jms)
<<Interface>>
Sistemi Distribuiti LS – Cenni su JMS 27
InterfacciaInterfaccia SessionSession
Creata da un oggettoConnection
Una volta connessi al JMS provider attraverso unaConnection, tutte le operazionisi svolgono nel contesto diuna Session attiva
Una sessione è single-threaded, ovvero ognioperazione di invio e ricezione dimessaggio avviene in modoserializzato
Le sessioni realizzano un contesto con proprietàtransazionali
Session
$ AUTO_ACKNOWLEDGE : int = 1$ CLIENT_ACKNOWLEDGE : int = 2$ DUPS_OK_ACKNOWLEDGE : int = 3
createBytesMessage()createMapMessage()createMessage()createObjectMessage()createObjectMessage()createStreamMessage()createTextMessage()createTextMessage()getTransacted()commit()rollback()close()recover()getMessageListener()setMessageListener()run()
(from jms)
<<Interface>>
QueueSession
createQueue()createReceiver()createReceiver()createSender()createBrowser()createBrowser()createTemporaryQueue()
(from jms)
<<Interface>>TopicSession
createTopic()createSubscriber()createSubscriber()createDurableSubscriber()createDurableSubscriber()createPublisher()createTemporaryTopic()unsubscribe()
(from jms)
<<Interface>>
Sistemi Distribuiti LS – Cenni su JMS 28
InterfacceInterfacce MessageProducerMessageProducere e MessageConsumerMessageConsumer
Per inviare un messaggio verso unaDestination, il cliente deverichiedere esplicitamenteall’oggetto Session di creare un oggetto MessageProducer
Analogamente interfacciaMessageConsumerClienti che vogliono riceveremessaggi creano un oggettoMessageConsumer (collegato ad un oggetto Destination) attraversoSessionDue modalità di ricezione deimessaggi: blocking, non-blocking
QueueSender
getQueue()send()send()send()send()
(from jms)
<<Interf ace>>
MessageProducer
setDisableMessageID()getDisableMessageID()setDisableMessageTimestamp()getDisableMessageTimestamp()setDeliv ery Mode()getDeliv ery Mode()setPriority ()getPriority ()setTimeToLiv e()getTimeToLiv e()close()
(from jms)
<<Interf ace>>
TopicPublisher
getTopic()publish()publish()publish()publish()
(from jms)
<<Interf ace>>
Sistemi Distribuiti LS – Cenni su JMS 29
ModalitModalitàà didi RicezioneRicezioneBlocking e NonBlocking e Non--blockingblocking
Modalità blocking: solito metodo receive() bloccanteModalità non blocking:
Cliente registra un oggetto MessageListenerQuando un messaggio è disponibile, il provider JMS richiama ilmetodo onMessage() di MessageListener (callback)
TopicSubscriber
getTopic()getNoLocal()
(from jms)
<<Interface>>QueueReceiver
getQueue()
(from jms)
<<Interface>>
MessageConsumer
getMessageSelector()getMessageListener()setMessageListener()receive()receive()receiveNoWait()close()
(from jms)
<<Interface>>
Sistemi Distribuiti LS – Cenni su JMS 30
RiassuntoRiassunto ““graficografico”” delledelle API JMSAPI JMS
Sistemi Distribuiti LS – Cenni su JMS 32
EsempiEsempi PraticiPratici::PassiPassi per per CostruireCostruire unauna ApplicazioneApplicazione JMS SenderJMS Sender
1. Ottenere un oggetto ConnectionFactory e un oggettoDestination (Topic o Queue) attraverso JNDI
2. Creare una Connection 3. Creare una Session per inviare/ricevere messaggi4. Creare un oggetto MessageProducer (TopicPublisher o
QueueSender)
5. Avviare la Connection6. Inviare o pubblicare messaggi7. Chiudere Session e Connection
Sistemi Distribuiti LS – Cenni su JMS 33
OggettiOggetti ConnectionFactoryConnectionFactorye Destination via JNDIe Destination via JNDI
// Ottiene oggetto InitialContextContext jndiContext = new InitialContext();
// Trova l’oggetto ConnectionFactory via JNDI TopicConnectionFactory factory =
(TopicConnectionFactory) jndiContext.lookup("MyTopicConnectionFactory");
// Trova l’oggetto Destination via JNDI // (Topic o Queue) Topic weatherTopic =
(Topic) jndiContext.lookup("WeatherData");
Sistemi Distribuiti LS – Cenni su JMS 34
OggettiOggetti ConnectionConnectione Sessione Session
// Richiede la creazione di un oggetto Connection// all’oggetto ConnectionFactoryTopicConnection topicConnection =
factory.createTopicConnection();
// Crea un oggetto Session da Connection:// primo parametro controlla transazionalità// secondo specifica il tipo di ackTopicSession session =
topicConnection.createTopicSession (false,session.CLIENT_ACKNOWLEDGE);
Sistemi Distribuiti LS – Cenni su JMS 35
// Richiede la creazione di un oggetto MessageProducer// all’oggetto Session// TopicPublisher per Pub/Sub// QueueSender per Point-to-PointTopicPublisher publisher =
session.createPublisher(weatherTopic);
// Avvia la Connection// Fino a che la connessione non è avviata, il// flusso dei messaggi non comincia: di solito// Connection viene avviata prima dell’invocazione// dei metodi per la trasmissione messaggitopicConnection.start();// Creazione del messaggioTextMessage message = session.createMessage();message.setText("text:35 degrees");// Invio del messaggiopublisher.publish(message);
MessageProducerMessageProducer eeAvvioAvvio delladella ConnectionConnection
Sistemi Distribuiti LS – Cenni su JMS 36
EsempiEsempi PraticiPratici::PassiPassi per per RiceventeRicevente JMS (nonJMS (non--blocking)blocking)
1. Ottenere oggetti ConnectionFactory e Destination (Topic o Queue) tramite JNDI
2. Creare un oggetto Connection
3. Creare un oggetto Session per inviare/ricevere messaggi
4. Creare un oggetto MessageConsumer(TopicSubscriber o QueueReceiver)
5. Registrare MessageListener per modalità non-blocking6. Avviare la Connection
7. Chiudere Session e Connection
Sistemi Distribuiti LS – Cenni su JMS 37
// Crea oggetto Subscriber da SessionTopicSubscriber subscriber =
session.createSubscriber(weatherTopic);
// Crea oggetto MessageListenerWeatherListener myListener
= new WeatherListener();
// Registra MessageListener per l’oggetto// TopicSubscriber desideratosubscriber.setMessageListener(myListener);
OggettiOggetti TopicSubscriberTopicSubscribere e MessageListenerMessageListener
Sistemi Distribuiti LS – Cenni su JMS 38
AffidabilitAffidabilitàà deidei MessaggiMessaggi
Modalità più affidabile per l’invio di un messaggio: messaggio PERSISTENT all’interno di una transazione
Modalità più affidabile per il consumo di un messaggio: ricezione all’interno di una transazione, sianel caso di ricezione da queue che tramite“abbonamento” durevole a un topic
Basic ReliabilityControllo ack dei messaggiUtilizzo di messaggi persistentiConfigurazione dei livelli di prioritàConsentire expiration di messaggi
Advanced Reliability“Abbonamenti” durevoli (durable subscription)Utilizzo di transazioni “locali”
Sistemi Distribuiti LS – Cenni su JMS 39
RicezioneRicezione e ACKe ACK
Alla ricezione, il cliente riceve e processa il messaggio
Dopo, se necessario, ACK del messaggioAcknowledgment è cominciato dal provider JMS o dal cliente, in dipendenza dalla modalità di ACK scelta per la sessione
In sessioni con transazionalità (transacted)ACK automatico al commitment della transazioneIn caso di roll-back della transazione, in seguito tutti i messaggigià consumati prima del roll-back sono ri-inviati
In sessioni non-transactedACK (quando e come) dipende dal valore specificato come secondo parametro del metodo createSession()
Sistemi Distribuiti LS – Cenni su JMS 40
Tipi Tipi didi ACKACK
Auto acknowledgment (AUTO_ACKNOWLEDGE)ACK automatico dopo il ritorno con successo dei metodiMessageConsumer.receive() o MessageListener.onMessage()
Client acknowledgment (CLIENT_ACKNOWLEDGE)Il cliente deve esplicitamente invocare il metodo acknowledge()dell’oggetto Message
Lazy acknowledgment (DUPS_OK_ACKNOWLEDGE)ACK da parte del provider JMS non appena un messaggio èdisponibile per il suo consumatore
Sistemi Distribuiti LS – Cenni su JMS 41
PersistenzaPersistenza::2 2 ModalitModalitàà didi ConsegnaConsegna
PERSISTENTDefaultSpecifica al provider JMS di garantire che il messaggio non sia perso quando in transito, ad esempio a causa di un guasto del provider JMS
NON_PERSISTENTNON richiede la memorizzazione dei messaggi lato JMS providerMigliori risultati di performance
Metodo SetDeliveryMode() nell’interfaccia MessageProducerproducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
forma estesa: producer.send(message, DeliveryMode.NON_PERSISTENT, 3,10000);
Sistemi Distribuiti LS – Cenni su JMS 42
PrioritPrioritàà e Expiratione Expirationnellanella ConsegnaConsegna deidei MessaggiMessaggi
10 livelli di prioritàda 0 (più basso) a 9 (più alto)default = 4
Uso del metodo setPriority() dell’interfacciaMessageProducer, ad esempio producer.setPriority(7);
o la forma estesa producer.send(message, DeliveryMode. NON_PERSISTENT, 7, 10000);
Expiration: possibilità di configurare TTL tramitesetTimeToLive() dell’interfaccia MessageProducer
producer.setTimeToLive(60000);
o forma estesa, producer.send(message, DeliveryMode.NON_PERSISTENT, 3, 60000);
Sistemi Distribuiti LS – Cenni su JMS 43
Come Come FunzionanoFunzionanole Durable Subscription?le Durable Subscription?
Un “abbonamento” durevole (durable subscription) puòavere un solo cliente attivo ad ogni istante
Un durable subscriber si registra specificando unaidentità univocaIn seguito, oggetti subscriber che hanno la medesimaidentità “recuperano l’abbonamento” (subscription resume) esattamente nello stato in cui è stato lasciatodal subscriber precedenteSe un durable subscription non ha clienti attivi, il provider JMS mantiene i messaggi fino a che questi non vengono effettivamenteconsegnati oppure alla loro expiration
Sistemi Distribuiti LS – Cenni su JMS 44
TransazioniTransazioni JMSJMS
Lo scope delle transazioni in JMS è SOLO fra clienti e sistema di messaging, non fra produttori e consumatori
Un gruppo di messaggi è consegnato come una unica unità (latoproduttore)Un gruppo di messaggi è ricevuto come una unica unità (latoconsumatore)
Transazioni “locali”Controllate dall’oggetto Session
Transazione comincia implicitamente quando l’oggetto disessione è creatoTransazione termina all’invocazione di Session.commit() o Session.abort()La sessione è transazionale se si specifica il flag appropriatoall’atto della creazione. Ad esempio:QueueConnection.createQueueSession(true, ..)
Sistemi Distribuiti LS – Cenni su JMS 45
TransazioniTransazioni DistribuiteDistribuite in JMSin JMS
Transazioni “distribuite”Devono essere coordinate da un transactional manager esterno come Java Transactions API (JTA)
Applicazioni possono controllare la transazione attraversometodi JTA
Utilizzo di Session.commit() e Session.rollback() è non consentito
In questo modo, operazioni di messaging possono esserecombinate con transazioni DB in una singola transazionecomplessiva
Sistemi Distribuiti LS – Cenni su JMS 46
SelettoriSelettori didi MessaggiMessaggi JMSJMS
Lato receiver, le applicazioni JMS possono utilizzareselettori per scegliere i soli messaggi che sonopotenzialmente di loro interesseSelettori come stringhe SQL92 che specificano regole difilteringSelettori non possono riferire il contenuto deimessaggi, ma solo proprietà e headerAd esempio:
JMSType==’wasp’
phone LIKE ‘223’
price BETWEEN 100 AND 200
name IN(‘sameer’,’tyagi’)
JMSType IS NOT NULL
Sistemi Distribuiti LS – Cenni su JMS 47
FunzionalitFunzionalitàà EscluseEscluse dalledalle API JMSAPI JMS
EncryptionLa specifica JMS lascia al provider JMS il compitopieno di gestire l’encryption in modo trasparentealle API
Controllo degli accessiCome sopra
Load balancingGestione e amministrazione di queue e topic
Sistemi Distribuiti LS – Cenni su JMS 48
JMS e Message Driven BeanJMS e Message Driven Bean
JMS Provider
EJB Container
Destin-ation
ConsumerInstances
Msg-drivenBean Class
MDB istanziato in modo asincrono quando un messaggio è ricevuto
OrderBean
InventoryManagement
Bean
M il
MessageDrivenBean
JMS Topics
Publish/subscribe
ProcessOrder
Procure Inventory
<Entity EJB>
<Entity EJB>
Logica di business nel metodo di ricezione del messaggio, ad esempio per modificare entity beano produrre un email di conferma