Introduzione
JMS (Java Messaging System), fornisce una piattaforma incrociata standard per le comunicazioni asincrone dei dati
business e gli eventi dell'impresa. La comunicazione avviene in genere tra i processi e le macchine. Gli oggetti nelle
applicazioni, in genere in esecuzione su macchine diverse, comunicano accedendo ai servizi di MOM (Message-Oriented
Middleware) tramite una serie standard di interfacce definite con JMS.
JMS fornisce una serie di interfacce che isolano il programmatore Java (implementando i produttori e consumatori dei
messaggi) dai provider di MOM.
Questa pagina di contenuto descrive i concetti chiave e l'uso specifico di JMS.
Messaggi
Un messaggio è un pacchetto contenente dati business. È composto da tre compartimenti:
-
Intestazione: Contiene informazioni di indirizzamento rete e identificatori del messaggio.
-
Proprietà: Contiene metadati relativi al messaggio. JMS richiede alcune proprietà, ma i programmatori
dell'applicazione possono aggiungerne altri.
-
Carico utile: Contiene i dati business reali. Il carico utile è interamente controllato dal programmatore
dell'applicazione.
In JMS, il messaggio è incapsulato in un oggetto che implementa l'interfaccia javax.jms.Message. Un programma
Java può avere accesso ai compartimenti tramite quest'interfaccia, come mostrato nel seguente diagramma. Il carico
utile ha diverse varianti, di cui si discuterà successivamente.
L'intestazione contiene le proprietà del messaggio che devono essere sempre presenti. Le seguenti proprietà sono
disponibili nell'intestazione:
-
MessageID
-
Timestamp
-
CorrelationID
-
ReplyTo
-
Destination
-
DeliveryMode
-
Redelivered
-
Type
-
Expiration
-
Priority
Le proprietà possono essere utilizzate dal programmatore dell'applicazione per fornire metadati relativi al
messaggio. Le proprietà consistono in un insieme arbitrario di nome-valore-coppie.
Esistono sei tipi di carichi utili supportati da JMS:
-
Messaggi Text
-
Messaggi Object
-
Messaggi Byte
-
Messaggi Map
-
Messaggi Stream
-
Messaggio (non presente)
I tipi di carico utile si riflettono nella gerarchia di classe dove le interfacce estendono il
javax.jms.Message. Nel diagramma seguente sono illustrati i messaggi Text, Object e Byte utilizzati
frequentemente. I messaggi di testo sono comunemente i vettori dei dati XML.
Destinazioni
JMS definisce il concetto di una destinazione. I messaggi vengono inviati e ricevuti dalle destinazioni. Le
destinazioni possono assumere due forme:
Le code sono destinazioni di messaggi utilizzati quando i messaggi vengono gestiti da un solo utente. Se questi
messaggi fossero inviati tramite posta ordinaria, dovremmo considerare le code come delle cassette postali di un
determinato utente. Le comunicazioni attraverso code sono definite point-to-point.
Gli argomenti sono destinazioni di messaggi utilizzati quando i messaggi devono essere ricevuti da più
destinatari, ognuno dei quali esprime interesse nel ricevere un particolare tipo di messaggio. Utilizzando nuovamente
l'analogia con la posta cartacea, potremmo pensare alla realizzazione di un articolo di giornale letto da un numero
indefinito di destinatari. Si fa spesso riferimento a questo tipo di progettazione come modello
publish-and-subscribe.
Recapito del messaggio
I recapiti del messaggio possono avvenire in due modi:
-
Permanente
-
Non permanente
Il recapito permanente include la memorizzazione del messaggio in un file o database, che garantisce il recapito. Il
recapito non permanente migliora le prestazioni e riduce gli eccessi di memoria, ma non garantisce il recapito del
messaggio. Per molte applicazioni che utilizzano JMS, il recapito permanente è il metodo più comune.
Client JMS
I client JMS sono oggetti Java che utilizzano JMS. Esistono due ruoli definiti:
-
Autori del messaggio: programmi Java che creano e inviano i messaggi.
-
Utenti del messaggio: programmi Java che ricevono i messaggi.
Il diagramma seguente offre una panoramica delle interazioni fra autore, utenti e provider
JMS.
L'autore può essere qualunque classe Java che abbia accesso ad una implementazione JMS. Gli autori del messaggio creano
e inviano i messaggi.
L'utente può essere qualunque classe Java che abbia accesso ad una implementazione JMS. Gli utenti ricevono e leggono i
messaggi.
Un client JMS utilizza un insieme di interfacce per accedere a JMS. Gli oggetti che implementano le interfacce JMS sono
creati seguendo una serie di produttori. Il primo fra questi è ConnectionFactory, ricercato tramite JNDI. Il
client JMS utilizza il produttore di connessione per creare un oggetto di connessione, utilizzato per creare un oggetto
di sessione, a sua volta utile come produttore per gli altri oggetti JMS. La figura seguente illustra le relazioni
concettuali principali tra i produttori, partendo dai dettagli di code e argomenti.
I produttori di connessione, le connessioni e le sessioni sono presenti in due forme: una per le code e l'altra per gli
argomenti. Il diagramma di classe qui sotto mostra la gerarchia di interfaccia relative ai concetti JMS chiave.
Provider JMS
Un provider JMS è un'implementazione che soddisfa la specifica JMS. È responsabile della ricezione, persistenza e
recapito dei messaggi.
Ulteriori informazioni
Per maggiori informazioni su JMS, visitare il sito Web http://java.sun.com/products/jms/.
|