CERCA SITEMAP 1280
Ultimo aggiornamento: 30 Agosto 2009

JBoss Messaging

JBoss Messaging è un provider Java Messaging Service ad alte prestazioni che introduce diversi miglioramenti rispetto a JBossMQ il provider JMS presente in JBoss AS 4.

JBoss Messaging è completamente compatibile con le specifiche Sun JMS 1.1 e consta essenzialmente di due parti:
  • JBoss Messaging Core: un sistema di trasporto di messaggi transazionale e affidabile
  • JMS Facade: una collezione di classi e file di configurazione che aggiungono al Core un’interfaccia JMS 1.1 compatibile.
Altre caratteristiche di JBoss Messaging includono:
  • modelli publich-subscrive e point-to-point
  • messaggi persistenti e non
  • garanzia di consegna dei messaggi che assicura che i messaggi arrivino una e una sola volta
  • supporto della semantica ACID (transazioni)
  • personalizzazione della sicurezza basata su JAAS
Inoltre dal momento che JBoss Messaging è compatibile con JMS 1.1 e 1.0.2b, qualsiasi codice scritto per JBossMQ funzionerà correttamente anche su JBoss Messaging senza alcun cambiamento.

Configurazione di JBoss Messaging

Le JMS API definiscono come i client interagiscono col server ma l’esatta definizione e implementazione del servizio di messaging dipendono dal provider.
La configurazione di JBoss Messaging avviene mediante diversi file di configurazione: messaging-service.xml, remoting-service.xml, xxx-persistence-service.xml. connection-factories-service.xml e destination-service.xml
Il cuore di JBoss Messaging è il Server Peer, la cui configurazione (insieme a quella di diversi plugin quali ThreadPool e MessageStore) risiede nel file di configurazione messaging-service.xml.

Un esempio di configurazione del Server Peer è il seguente:

  
    
    
    
    
    
    
  

  jboss.messaging:service=ThreadPool
  jboss.messaging:service=PersistenceManager
  jboss.messaging:service=MessageStore
  jboss.messaging:service=ChannelMapper

  
  java:/jaas/messaging
  
    
      
    
  

L’elemento attribute con name SecurityDomain viene usato quando JBoss Messaging autentica e autorizza l’accesso alle destinazioni JMS per la lettura, la scrittura o la creazione.
Deve pertanto corrispondere ad una entry definita nel file login-config.xml, che è configurata esattamente come qualsiasi altro security domain in JBoss.
L’elemento attribute con name DefaultSecurityConfig viene usato la configurazione di sicurezza per una particolare coda o topic non è stata sovrascritta nel deployment descriptor delle destinazioni.
Tale elemento contiene un elemento security che contiene elementi role multipli.
Ogni elemento role definisce l’accesso per un particolare ruolo: se l’attributo read è true allora di default il ruolo ha accesso in lettura alle destinazioni e può quindi creare consumer e ricevere messaggi, se l’attributo write è true allora ha accesso in scrittura e può creare producer e inviare messaggi, se l’attributo create è posto a true può creare durable subscription.

Configurare il Persistence Store

JBoss Messaging interagisce con il sistema di memorizzazione attraverso due servizi: il Persistence Manager e il Channel Mapper.
Il Persistence Manager è usato per gestire le funzioni relative ai messaggi mentre il Channel Mapper per gestire i dati persistenti relativi alle destinazioni.
JBoss Messaging fa uso di un Persistence Manager JDBC che gestisce la persistenza dei messaggi attraverso un database relazionale accessibile mediante JDBC: dal momento che il Persistence Manager è pluggable è possibile sostituirlo con altre impleentazioni (che ad esempio utilizzano altre forme di memorizzazione).
La configurazione del servizio di persistenza avviene mediatne il file xxx-persistence-service.xml: di default si fa uso di un database Hypersonic e quindi del file hsqldb-persistence-service.xml
Nella cartella docs/examples/jms sono comunque disponibili i file di configurazione per database esterni come MySQL, Oracle, PostgreSQL ...

La configurazione del Persistence Manager per MySQL è ad esempio la seguente:

  
    jboss.jca:service=DataSourceBinding,name=DefaultDS
    jboss:service=TransactionManager
    jboss.messaging:service=ChannelMapper
    java:/DefaultDS
    true
    true
    
    
    500
  

  
    jboss.jca:service=DataSourceBinding,name=DefaultDS
    jboss:service=TransactionManager
    java:/DefaultDS
    
    
  

Per cambiare database è quindi sufficiente sostituire il file hsqldb-persistence-service.xml con il file di configurazione del database che si vuole utilizzare e riavviare il server.
Inoltre di default il Messaging Service fa riferimento al datasource java:/DefaultDS, se si sta utilizzando un datasource con un nome JNDI differente occorre aggiornare tutti gli attributi DataSource nel file di configurazione della persistenza.
Settando a true l’attributo CreateTableOnStartup il persistence manager crea le tabelle e gli indici necessari quando viene avviato: se le tabelle esistono già viene prodotta uan SQLEXception che verrà ignorata dal Persistence Manager.

Configurare le destinazioni

Quando viene installato JBoss Messaging ha un insieme di destinazioni preconfigurate definite nel file destinations-service.xml

  jboss.messaging:service=ServerPeer



  jboss.messaging:service=ServerPeer
  
    
      
      
      
    
  



  jboss.messaging:service=ServerPeer
  
    
      
      
      
    
  

L’attributo SecurityConfig permette di specificare quali ruoli hanno accesso alla destinazione in lettura (read), scrittura (write) e creazione (create).
Tali impostazioni sovrascrivono quelle di default nel file messaging-service.xml. Per definire una nuova destinazione occorre creare un nuovo deployment descriptor chiamato *-service.xml e copiarlo nella cartella di deploy.


  jboss.messaging:loader=ScopedLoaderRepository
    java2ParentDelegation=false
  
  
    jboss.messaging:service=ServerPeer
    
      
        
        
        
      
    
    75000
    2000
    2000
  

Una nuova ed importante caratteristica di JBoss Messaging sono i Pageable Channels.
Se un’applicazione deve supportare code molto grandi o sottoscrizioni contenenti milioni di messaggi allora non è possibile memorizzarli tutti.
JBoss Messaging risolve questo problema permettendo di specificare il massimo numero di messaggi che possono essere memorizzati in memoria coda per coda o topic per topic.
  • fullSize: rappresenta il massimo numero di messaggi amntenuti in una coda o topic.
  • pageSize: rappresenta il massimo numero di messaggi precaricati a seguito di un’operazione.
  • downCacheSize – quando i messaggi vengono memorizzati essi prima finiscono in una Down Cache in maniera tale da poterli memorizzare con una singola operazione e quindi migliorare le prestazioni.
Questo parametro determina pertanto la dimensione della Down Cache e quindi il numero massimo di messaggi che questa può memorizzare prima che questi vengano trasferiti nel database.

Configurare ConnectionFactory

Di defualt JBoss Messaging effettua il binding di una connection factory ai seguenti JNDI context: /ConnectionFactory, /XAConnectionFactory, java:/ConnectionFactory, java:/XAConnectionFactory
E’ possibile comunque aggiurngere connection factory aggiungendo nuovi Mbean ConnectionFactory nel file connection-factories-service.xml o definendo interamente un nuovo servizio mediante un deployment descriptor *-service.xml posto nella directory deploy.


  jboss.messaging:loader=ScopedLoaderRepository
    java2ParentDelegation=false
  
  
    
      
    
    jboss.messaging:service=ServerPeer
    jboss.messaging:service=Connector,transport=socket
    10
    1000
    50
    50
    
      
        /MyConnectionFactory1
        /factories/cf1>
      
    
  

Il precedente esempio crea una connection factory con client ID preconfigurato e lo collega /MyConnectionFactory e /factories/cf
PrefetchSize è un attributo opzionale che determina quanti messaggi il consumer lato client memorizzerà localmente evitanto in tal modo al client di comunicare col server per ogni messaggio ricevuto.
DefaultTempQueueFullSize, DefaultTempQueuePageSize, DefaultTempQueueDownCacheSize sono attributi opzionali che determinano i parametri di paging di default.