Università degli Studi di Bologna
FACOLTÀ DI INGEGNERIA
Corso di Laurea in Ingegneria Informatica L-S
Anno Accademico 2005-2006
Manage users with Java Message
Service
Autore: NICOLA IOVINO
Matricola: 171684
Corso: Reti Di Calcolatori L-S
Docente: Prof. Antonio Corradi
1
Introduzione
 Molte aziende nell’ambito dell’E-commerce utilizzano un
insieme di applicazioni che memorizzano le proprie copie di
contatti utente al loro interno.
 Spesso molte informazioni relative agli utenti vengono
memorizzate in molte enterprise applications.
Nell’ambito dell’E-commerce i profili
utente sono utilizzati per la
pianificazione delle risorse dell’impresa
(ERP),per amministrare i rapporti con i
clienti (CRM) e amministrare le catene di
rifornimento (SCM).
2
Obiettivi dell’applicazione
 L’obiettivo è quello di mantenere le copie di profili utente
consistenti fra le varie applicazioni eterogenee per evitare
confusione.
 Occorre quindi una infrastruttura semplice di comunicazione fra
le varie enterprise applications; la comunicazione deve essere
affidabile, anche su reti non affidabili, così che le informazioni
non vengano perse.
 Dati questi rigidi obiettivi di affidabilità possiamo escludere
alcune soluzioni e protocolli come RMI, RPC, ecc.:tutte queste
tecnologie infatti, oltre ad essere sincrone, richiedono una
connessione fisica attiva fra il cliente e il server.
3
Infrastruttura Middleware
 Un sistema di middleware Message-Oriented (MOM) è una
infrastruttura che permette lo scambio di dati fra le applicazioni mediante
l’invio e la ricezione di messaggi con le seguenti caratteristiche:
 Elevato disaccoppiamento delle applicazioni
 Asincronicità
 Supporto alla comunicazione molti-a-molti
 Scalabilità
 I modelli di base per la gestione dei messaggi sono essenzialmente
due:
 Point-to-Point
 Publish and Subscribe
4
Java Message Service
 JMS è una specifica Sun facente parte della piattaforma J2EE che
fornisce un metodo standard tramite il quale le applicazioni
possono creare, inviare e ricevere messaggi usando un sistema
MOM.
 Le qualità di un’applicazione JMS sono sintetizzabili in:
 Robustezza ai cambiamenti
 Time independence
 Location independence
 Qualità del servizio configurabile
 Supporto per i due modelli base: PTP, Pub/Sub
5
Architettura logica
 Un sistema architettato con JMS è
costituito da:
-Client JMS
-Messaggi
-JMS Provider
-Administered Objects
 Mappiamo gli Administered Objects in uno spazio di nomi JNDI (Java Naming
Directory Service). JNDI è una serie di API per accedere a differenti servizi di
directory e naming. JMS utilizza JNDI per recuperare i references agli
Administered Objects: ConnectionFactory e Destination.
6
Schema generale
User
JMS Subscriber
(ERP)
Manager
Master
DB
JMS Publisher
Account Manager è l’interfaccia che
consente di aggiornare le informazioni
dell’utente. Una volta aggiornato il
master database, il topic verrà
notificato dal JMS Publisher.
JMS Topic
Account
JMS Subscriber
(SCM)
JMS Subscriber
(CRM)
7
Garanzie di consegna (1)
 Per conseguire la consegna affidabile e garantita dei messaggi dal
publisher ai subscribers occorre prendere degli accorgimenti:
• Il Publisher deve settare il DeliveryMode dei messaggi a
PERSISTENT: ciò evita che i messaggi non vengano persi
nell’eventuale caduta del provider (Persistent Storage).
• Le subscriptions verranno rese Durable: questa scelta
implica che se un subscriber è inattivo il messaggio non
viene perso ma piuttosto consegnato quando il subscriber
tornerà attivo nuovamente.
8
Garanzie di consegna (2)
• La sessione di un subscriber è caratterizzata dalla modalità
AUTO_ACKNOWLEDGE. Un messaggio non è “acknowledged”
finché non è consumato con successo: nel nostro caso il
messaggio verrà riconosciuto quando entrerà in funzione il
meccanismo di callback del sistema.
Consegna con modalità once-and-only-once
 Callback: handler “event driven” invocato in maniera
asincrona quando un nuovo messaggio arriva.
 Il subscriber registra un oggetto di callback. I messaggi
sono ricevuti invocando il metodo onMessage()
nell’interfaccia di callback.
9
Struttura di un messaggio
 Con JMS è possibile integrare un documento XML all’interno di
un messaggio. La struttura di un messaggio sarà allora:
<UserProfiles>
<User>
<Action>Create</Action>
<Username>Red</Username>
<FirstName>Paolo</FirstName>
XML è una tecnologia non
proprietaria che consente di
scambiare dati fra
applicazioni eterogenee.
<LastName>Rossi</LastName>
<Email>[email protected]</Email>
</User>
</UserProfiles>
10
Architettura Cluster (1)
 Per conseguire gli obiettivi di reliability e high availability
occorre ovviare all’eventuale caduta del JMS Provider:
Network of
Broker 2
Publisher
Broker 1
Clustering realizzato in
maniera trasparente. Il
topic è disponibile
all’interno del cluster.
Su ogni broker del cluster
brokers
vanno replicate
le
Failover:
il cliente si
ConnectionFactories,
connette ad un nodo nel
Destinations e
cluster e “auto-fail over” in
DurableSubscriptions
un nuovo nodo se c’è
fallimento.
Subscriber
11
Architettura Cluster (2)
 Per realizzare l’architettura cluster sfruttiamo le funzionalità
messe a disposizione dal JMS provider della LogicBlaze:
ActiveMQ.
 Utilizzeremo a questo scopo un protocollo messo a disposizione da
ActiveMQ:
Reliable: Provides a list of possible URIs to connect to and one is
randomly chosen. If the connection fails then the transport autoreconnects to a different one.
 Per le operazioni di recovery dopo un fallimento un broker sfrutta
il proprio PERSISTENT STORAGE dove potrà recuperare:
le destinazioni, la lista di “durable subscriptions”, la lista di “acks” per ogni
messaggio, lo stato di tutte le transizioni committed.
12
Replicated Message Store (1)
 Per conseguire gli obiettivi preposti del sistema occorre utilizzare un
sistema di gestione della persistenza.
 Per gestire il caso di subscribers non attivi occorre prevedere un
sistema che memorizzi il messaggio finché questo non verrà
consegnato. Questo ruolo è svolto da un database persistente in cui
verrà memorizzato il messaggio non “acknowledged”. Nel nostro
caso esso è rappresentato da una tabella realizzata in SQL:
CREATE TABLE ACTIVEMQ_MSGS(
ID INTEGER NOT NULL,
CONTAINER VARCHAR(250),
MSGID VARCHAR(250),
MSG BLOB,
PRIMARY KEY ( ID ) )
13
Replicated Message Store (2)
 Ma come gestiamo la persistenza con un cluster di brokers?
 Si presentano allora due scenari:
• Se entrambi i brokers fanno riferimento a un singolo
“persistent storage”
Singolo punto di fallimento
• Se il broker che gestisce un messaggio diretto a un
subscriber inattivo cade
Il cliente per aggiornare i propri profili utente si connette all’altro broker del
cluster che non possiede nel suo persistent storage il messaggio inviato
precedentemente.
14
Replicated Message Store (3)
 Per ovviare a questi inconvenienti ricorriamo al concetto di
RAIDb (Redundant Array Of Inexpensive Databases)
RAIDb fornisce affidabilità migliore di quella di un singolo database
combinando molteplici istanze di database in una matrice di database.
Nel nostro caso ricorriamo a RAIDb-1 (mirroring): il database è
completamente replicato su ogni macchina.
Riusciamo così a fare riferimento a una
astrazione di database che in realtà è
composto da due backends reali posti su due
macchine diverse.
Sfruttiamo i driver C-JDBC
15
Architettura e Interfaccia
Architettura del progetto:
Publisher:
Subscriber:
16
Conclusioni
 Il framework descritto sopra offre un sistema robusto ed efficiente
per la gestione dei profili utente. Consente, grazie al modello uno-amolti, la consegna garantita dei messaggi e dunque affidabilità.
 Il sistema garantisce sincronizzazione fra applicazioni eterogenee
senza che questa sia ottenuta esplicitamente ad intervalli regolari.
 Sebbene JMS non sia nato specificamente per scambiarsi dati XML,
l’utilizzo di queste due tecnologie insieme offre una importante
soluzione per molti “enterprise application problems”.
 Possibili miglioramenti possono riguardare l’implementazione
di politiche di sicurezza e l’utilizzo di JSP o Servlets per la
gestione dei profili utente.
17