Java Message Service

De Viquipèdia
Dreceres ràpides: navegació, cerca

L'API de Java Message Service és una API Message Oriented Middleware de Java (MOM) per l'enviament de missatges entre dos o més clients. JMS és una especificació desenvolupada sota la Java Community Process.

Històric de versions[modifica | modifica el codi]

Elements[modifica | modifica el codi]

Els següents elements són JMS :[1]

JMS provider
Una implementació de la interfície JMS per un Message Oriented Middleware (MOM). Els proveïdors estan implementats tant com a implementació d'un JMS de Java com un adaptador d'un MOM que no sigui Java.
JMS client
Una aplicació o procés que produeix i/o consumeix missatges.
JMS producer
Un client JMS que crea i envia missatges.
JMS consumer
Un client JMS que rep missatges.
JMS message
Un objecte que conté les dades a ser transferides entre clients JMS.
JMS queue
Una àrea d'espera que conté missatges que han estat enviats i esperen a ser llegits. Com el propi nom de cua suggereix, els missatges es lliuren en l'ordre enviat. Un missatge és eliminat de la cua un cop ha estat llegit.
JMS topic
Un mecanisme de distribució per publicar missatges que són lliurats a múltiples subscriptors.

Models[modifica | modifica el codi]

L'API de JMS suporta dos models:

Al model punt a punt o de cua, un productor envia missatges a una cua particular i un consumidor llegeix missatges de la cua. Aquí, el productor coneix la destinació del missatge i envia el missatge directament a la cua del consumidor. Es caracteritza pel següent:

  • Només un consumidor rep el missatge
  • El productor no ha d'estar executant al moment que el consumidor rep el missatge, ni el qui rep ha d'estar corrent al moment de l'enviament.
  • Cada missatge processat amb èxit, és confirmat per receptor.

El model publicar/subscriure suporta publicar missatges per un tema concret. S'hi poden registrar zero o més subscriptors interessats a rebre missatges en un tema en particular. En aquest model, ni el publicador ni el subscriptor saben res un de l'altre. Un símil adequat seria el d'un butlletí d'enviament anònim. Les següents són característiques d'aquest model:

Múltiples consumidors poden obtenir el missatge
Hi ha una dependència de temps entre publicadors i subscriptors. El publicador ha de crear una subscripció perquè els clients s'hi puguin subscriure.
El subscriptor ha de romandre continuadament actiu per rebre missatges, llevat que hi hagi un terme per la subscripció. En aquest cas, els missatges publicats mentre el subscriptor no està connectat es redistribuiran quan es reconnecti.

Usant Java, JMS aporta una manera de separar l'aplicació de la capa de transport o proveïment de dades. Les mateixes classes Java poden ser usades per comunicar amb diferents proveïdors JMS usant la informació JNDI pel proveïdor desitjat. Les classes primer usen una factoria de connexions per connectar a la cua o tema i llavors usen, emplenen i envien o publiquen els missatges. A la part de la recepció, els clients llavors reben o se subscriuen als missatges.

API[modifica | modifica el codi]

La JMS API és proveïda pel paquet Java javax.jms.

Interfície ConnectionFactory[modifica | modifica el codi]

Un objecte administrat que el client usa per crear una connexió al proveïdor JMS. Els clients JMS accedeixen a la factoria de connexions a través d'interfícies portables de manera que el codi no necessita ser canviat si canvia la implementació de sota. Els administradors configuren la factoria de connexions a l'espai de noms Java Naming and Directory Interface (JNDI) així que els client JMS el poden esbrinar. Depenent del tipus de missatge, els usuaris usaran una factoria de connexions en cua o per tema.

Interfície Connection[modifica | modifica el codi]

Una vegada hem obtingut una factoria de connexions, una connexió a un proveïdor JMS pot ser creada. Una connexió representa un enllaç de comunicació entre l'aplicació i el servidor de missatges. Depenent del tipus de connexió, les connexions permeten que els usuaris creïn sessions per enviar i rebre missatge d'una cua o tema.

Interfície Destination[modifica | modifica el codi]

Un objecte administrat que encapsula la identitat de la destinació d'un missatge, que és on els missatges són lliurats i consumits. És o una cua o un tema. L'administrador JMS crea aquests objectes i els usuaris els descobreixen usant (JNDI). Com la factoria de connexions, l'administrador pot crear dos tipus de destinacions: cues per Punt a Punt i temes per Publicar/Subscriure.

Interfície Consumer.html Message Consumer[modifica | modifica el codi]

Un obejcte creat per una sessió. Rep missatges enviats a una destinació. El consumidor pot rebre missatges síncronament (blocant) o asíncronament (sense blocar) tant per missatgeria per cua com de tipus tema.

Interfície MessageProducer[modifica | modifica el codi]

Un objecte creat per una sessió que envia missatges a una destinació. L'usuari pot crear i enviar a una destinació específica o crear un enviador genèric que especifica la destinació alhora que el missatge és enviat.

Interfície Message[modifica | modifica el codi]

Un objecte que és enviat entre consumidors i productors, és a dir, d'una aplicació a una altra. Un missatge té tres parts principals:

  1. Una capçalera de missatge (opcional): Conté configuracions operacionals per identificar i encaminar missatges
  2. Un conjunt de propietats de missatge (opcional) : Conté propietats addicionals per suportar compatibilitat amb altres proveïdors o usuaris. Pot ser usat per crear camps personalitzats o filtres (selectors).
  3. Un cos de missatge (opcional) : Permet als usuaris crear cinc tipus de missatges (missatge de text, missatge de Map, missatge en bytes, missatge en stream i missatge objecte).

El missatge d'interfície és extremadament flexible i proveeix nombroses maneres de personalitzar els continguts d'un missatge.

Interfície Session[modifica | modifica el codi]

Representa un context de fil únic per l'enviament i recepció de missatges. Una sessió és de fil únic així que els missatges se serialitzen, cosa que implica que es reben d'un en un, en l'ordre que són enviats. El benefici d'una sessió és que suporta transaccions. Si l'usuari selecciona suport de transacció, el context de la sessió sosté un grup de missatges fins que la transacció rep el commit, llavors és quan els missatges són lliurats. Abans de fer el commit, l'usuari pot cancel·lar els missatges usant una operació de rollback. Una sessió permet els usuaris crear productors de missatges per enviar-ne i consumidors de missatges per rebre'n. [1]

Implementacions de fabricant[modifica | modifica el codi]

Per usar JMS, cal tenir un proveïdor que manegui les sessions i les cues. N'hi ha de codi obert i de propietàries.

Articles sobre fabricants de codi obert:

Articles sobre fabricants proprietaris:

Una matriu de comparació exhaustiva de proveïdors JMS pot ser trobada a : http://www.theserverside.com/reviews/matrix.tss

Tot els servidors d'aplicacions J2EE 1.4 i posteriors tenen com a requeriment contenir un JMX implementat.

Enllaços externs[modifica | modifica el codi]

Veieu també[modifica | modifica el codi]

Referències[modifica | modifica el codi]